2010-06-08 4 views
0

Учитывая экземпляр класса, я хочу установить свойства атрибутов во время выполнения.Поиск атрибутов свойств экземпляра класса

Итак, я пробовал это, но, насколько я могу судить, это находит атрибуты класса, а не экземпляр, поэтому любые изменения, которые я вношу в свойства атрибута, не влияют.

var properties = myObject.GetType().GetProperties(); 

foreach (object prop in properties) 
{ 
    var attribute =prop.GetCustomAttributes(typeof(MyAttribute), true)[0]; 
    //attribute.MyProp do some stuff 
} 

Если я попробовать использовать тип дескриптора, как показано ниже, нет никакого способа добраться до атрибутов на свойства.

var myObject= (MyClass) object; 
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(myObject); 

//There is no props[0].GetCustomAttributes(
+1

Это не может работать. Атрибуты должны быть неизменными. – SLaks

+0

Атрибуты связаны с элементом кода, а не с представлением во время выполнения этого элемента кода. (btw, TypeDescriptor имеет метод GetAttributes, но он все еще основан на типе, а не на экземпляре) – SWeko

ответ

2

Атрибуты - это метаданные, которые вы применяете к типу или члену типа, а не к экземпляру. Если вы применяете значения к определенному экземпляру класса, не следует ли вам использовать свойства/поля?

+0

Ну, я пытаюсь обойти тот факт, что атрибуты принимают только константы времени компиляции в качестве параметров, поэтому мне нужно динамически поставлять некоторые значения. – Dan

+0

Ну, вы можете получить экземпляр атрибута, если вам нужно, до тех пор, пока вы используете этот атрибут. Вопрос, который вы задали бы, заключается в том, если вы приложите все усилия, чтобы получить экземпляр атрибута для применения к нему значений времени выполнения, каково использование атрибута? –

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