2011-01-13 53 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是值得研究的问题。它们允许编译器在编译时知道泛型类型的对象上的成员。