private static IEnumerable SortAndFilterProperties()

in CommandLine/XblConfig/ObjectPrinter.cs [136:181]


        private static IEnumerable<PropertyInfo> SortAndFilterProperties(Type type, bool isList)
        {
            if (type.Module.ScopeName == "CommonLanguageRuntimeLibrary")
            {
                return null;
            }

            SortedDictionary<int, PropertyInfo> orderedProperties = new SortedDictionary<int, PropertyInfo>();
            List<PropertyInfo> unorderedProperties = new List<PropertyInfo>();
            
            foreach (PropertyInfo property in type.GetProperties())
            {
                DisplayAttribute displayAttribute = property.GetCustomAttribute<DisplayAttribute>();
                if (displayAttribute != null)
                {
                    if (isList)
                    {
                        if (displayAttribute.GetListOrder().HasValue && !displayAttribute.ListOmit)
                        {
                            orderedProperties.Add(displayAttribute.ListOrder, property);
                        }
                        else if (!displayAttribute.ListOmit)
                        {
                            unorderedProperties.Add(property);
                        }
                    }
                    else
                    {
                        if (displayAttribute.GetOrder().HasValue && !displayAttribute.Omit)
                        {
                            orderedProperties.Add(displayAttribute.Order, property);
                        }
                        else if (!displayAttribute.Omit)
                        {
                            unorderedProperties.Add(property);
                        }
                    }

                    continue;
                }

                unorderedProperties.Add(property);
            }

            return orderedProperties.Select(c => c.Value).Concat(unorderedProperties);
        }