2009-02-21 4 views
17

Я пытаюсь выполнить итерацию над цветовыми свойствами «Цвет».Итерация над свойствами класса

К сожалению, его нет в коллекции, поэтому его просто класс с кучей статических свойств.

Кто-нибудь знает, может ли его итерация над свойствами класса быть статичной или объектной?

ответ

29

Да, возможно использование отражения. Конкретные цвета определяются как статические свойства Color struct.

PropertyInfo[] colors = typeof(Color).GetProperties(BindingFlags.Static|BindingFlags.Public); 
foreach(PropertyInfo pi in colors) { 
    Color c = (Color)pi.GetValue(null, null); 
    // do something here with the color 
} 
+6

Я хотел бы добавить: если (pi.PropertyType == TypeOf (цвет)) к будущая защита от любых новых свойств, добавляемых в Color. – ICR

2

Вы также можете быть заинтересованы в этом коде

http://blog.guymahieu.com/2006/07/11/deep-reflection-of-properties-propertyreflector/

Это обеспечивает легкий способ установить/получить свойства по имени. Если вы посмотрите в GetBestMatchingProperty вы найдете итерации по свойствам, что делается точно так же, как были опубликованы ранее Iterating over class properties

Смежные вопросы