我如何通过c#访问泛型类中的动态类属性?

时间:2017-10-30 08:31:48

标签: c# oop generics

我想在泛型类中访问我传递的动态类属性。我能怎么做?

我的班级属性在这里。

public class Test
    {
        [DataMember]
        public string Body { get; set; }
        [DataMember]
        public string Header { get; set; }

    }

我发送了测试' class to Class1。

public class Class1
{
    public static T Fill<T>(T myClass) 
    {
        //how can i access Test class property in here? 
        myClass.Header ????
        return obj;
    }
}

我将类传递给泛型方法如下。

var x = Class1.Fill(new Test());

请帮忙。谢谢。

2 个答案:

答案 0 :(得分:2)

如果你确实需要动态且确定有Header字符串属性,那么你可以这样做:

public class Class1
{
    public static dynamic Fill(dynamic myClass) 
    {
        myClass.Header = "222";
        ...
        ...
        return myClass; // or whatever
    }
}

但是,如果你最终得到了这个,我会建议你复习你的设计。

答案 1 :(得分:0)

如果泛型类始终从Test派生,则可以使用类型约束来访问类的属性:

public static T Fill<T>(T myClass) where T: Test
{
    myClass.Header //Will work 
    return obj;
}

如果类不是从测试派生的,则必须使用反射来访问该属性。使用简单的反射,您可以执行以下操作:

public static T Fill<T>(T myClass) where T: Test
{
    typeof(T).GetProperty("Header").GetValue(myClass); // Get the value
    return obj;
}