设置通用对象的成员?

时间:2011-01-13 04:13:26

标签: c# reflection generics

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)
    { 
    }
}

我可以使用Reflection API吗?

我有一个泛型类,我想设置一个实例的成员。

提前致谢!

2 个答案:

答案 0 :(得分:0)

你可以,但我会警告它。你本质上是围绕类型安全系统进行最终运行,并且存在很多陷阱。

如果必须,代码是这样的,假设有问题的成员是属性而不是字段:

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

答案 1 :(得分:0)

是的,你可以。但是,如果你能在没有反射的情况下做到这一点,那将是最好的,因为反射速度慢,笨重且难以阅读,并可能表明你的设计存在缺陷。

我不得不问这个代码你的最终目标是什么?你真的想要一个基于命名该成员的字符串来设置成员的方法吗?或者您希望能够在泛型类型上设置成员,但是您知道在编译时它是什么吗?如果是后者,那么使用generic constraints就值得研究。它们允许编译器在编译时知道泛型类型的对象上的成员。