public string ToHtmlTableByProperties <T>(IEnumerable <T> enums)
            {
                System.Reflection.PropertyInfo[] props = GetGetPropertiesByAttrSkipFiliter(type: typeof(T));

                #region Check
                if (props.Length == 0)
                {
                    throw new Exception("At least one Property");
                }
                #endregion

                //Head
                var thead = new StringBuilder();
                foreach (var p in props)
                {
                    var    costomAtt   = CustomAttributeHelper.GetCustomAttributeByProperty(_customAttributes, p);
                    string thInnerHTML = costomAtt != null ? costomAtt.DisplayName : Encode(p.Name);
                    thead.Append($"<th>{thInnerHTML}</th>");
                }

                //Body
                var tbody = new StringBuilder();
                foreach (var e in enums)
                {
                    tbody.Append($"<tr{_TrAttHtml}>");
                    foreach (var prop in props)
                    {
                        var    compiledExpression = ExpressionCache.GetOrAddExpressionCache <T>(prop);
                        var    value       = compiledExpression(e);
                        string tdInnerHTML = Encode(value);
                        tbody.Append($"<td{_TdAttHtml}>{tdInnerHTML}</td>");
                    }
                    tbody.Append("</tr>");
                }

                //Table html
                var html = RenderHtmlTable(thead, tbody);

                return(html.ToString());
            }