2011-01-13 57 views
0
public class myclass 
{ 
    public int mymember { get; set; } 
} 

class MySetterClass<T> 
{ 
    // obj.mymember = o for myclass 
    public static void SetMember(string membername, object o, ref T obj) 
    { 
    } 
} 

我能做到這一點與反射API?設置通用對象的成員?

我有一個泛型類,我想設置一個實例的成員。

在此先感謝!

+2

它總是一個屬性?另外,你爲什麼通過引用傳遞`obj`? – Ani 2011-01-13 04:16:21

+0

我有一個myclass對象obj,我想將mymember設置爲5.是否有可能通過不通過ref傳遞給MySetterClass 這樣做?它總是屬性,如果可以用其他任何方式完成,我希望聽到它們:) – Kubi 2011-01-13 04:19:34

回答

0

你可以,但我會警告它。你基本上正在圍繞類型安全系統做最後的嘗試,並且存在很多陷阱。

如果必須,代碼是這樣的,假設有問題的部件是財產,而不是現場:

typeof(T).GetProperty(membername).SetValue(obj, o); 
0

是的,可以。但是,如果您可以不經過反思就可以做到這一點,那將是最好的,因爲反射速度慢,繁瑣且難以閱讀,並且可能表明您的設計存在缺陷。

我必須問你的這個代碼的最終目標是什麼?你真的想要一個基於字符串命名該成員來設置成員的方法嗎?或者你想能夠設置一個泛型類型的成員,但是你知道它在編譯時是什麼?如果是後者,那麼使用generic constraints是值得研究的問題。它們允許編譯器在編譯時知道泛型類型的對象上的成員。