вы должны использовать отражение .... ( код «заимствован» из этого url )
using System.Reflection; // reflection namespace
// get all public static properties of MyClass type
PropertyInfo[] propertyInfos;
propertyInfos = typeof(MyClass).GetProperties(BindingFlags.Public |
BindingFlags.Static);
// sort properties by name
Array.Sort(propertyInfos,
delegate(PropertyInfo propertyInfo1, PropertyInfo propertyInfo2)
{ return propertyInfo1.Name.CompareTo(propertyInfo2.Name); });
// write property names
foreach (PropertyInfo propertyInfo in propertyInfos)
{
Console.WriteLine(propertyInfo.Name);
}
Если Вы запустите с чего-то, что имеет .Length
или .Count
(такой как ICollection<T>
, IList<T>
, List<T>
, и т.д.) то - тогда это будет самой быстрой опцией, так как она не должна проходить GetEnumerator()
/ MoveNext()
/ Dispose()
последовательность, требуемая Any()
для проверки на непустое IEnumerable<T>
последовательность.
всего Для IEnumerable<T>
, тогда Any()
будет обычно быть более быстрым, поскольку это только должно посмотреть на одно повторение. Однако обратите внимание, что реализация LINQ к объектам [1 112] действительно проверяет на [1 113] (использование .Count
как оптимизация) - поэтому, если Ваш базовый источник данных будет непосредственно список/набор, не будет огромной разницы. Не спрашивайте меня, почему это не использует недженерика ICollection
...
, Конечно, при использовании LINQ для фильтрации его и т.д. (Where
и т.д.), у Вас будет основанная на блоке итератора последовательность, и таким образом, этот ICollection<T>
оптимизация будет бесполезна.
В целом с [1 118]: палка с [1 119];-p