2010-06-08 77 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 2010-06-08 16:05:35

+0

屬性與代碼元素相關聯,而不與該代碼元素的運行時表示相關聯。 (順便說一句,TypeDescriptor有一個GetAttributes方法,但仍然基於類型,而不是在一個實例) – SWeko 2010-06-08 17:03:52

回答

2

屬性是您應用於類型或類型的成員而不是實例的元數據。如果您將值應用於某個類的特定實例,是否應該考慮使用屬性/字段?

+0

嗯,我想解決的事實,屬性只需要編譯時間常量作爲參數,所以我需要動態地提供一些值。 – Dan 2010-06-08 16:06:03

+0

那麼,只要你有這個屬性的用法,你可以獲得屬性的一個實例。你會問的問題是,如果你要盡一切努力讓一個屬性的實例將運行時值應用到它,那麼它是一個屬性有什麼用? – 2010-06-08 16:16:28