1

使用反射:

如果我有一个类型的实例X<Y>(我不知道到底Y是什么),因为X它是一个泛型类型 ( X<T>),我如何获得一个属性的值Y

就像是:

Type yType = currentObject.GetType().GetGenericArguments()[0];

// How do I get yInstance???
var yInstance = Convert.ChangeType(???, yType);

我需要去:

object requiredValue = yType.GetProperty("YProperty").GetValue(yInstance, null);
4

1 回答 1

2

使用以下方法获取通用参数的 PropertyInfo 对象:

PropertyInfo myProperty = myGenericType.GetType().GenericTypeArguments[0].GetProperty("myPropertyName");

其中“0”是类定义中泛型类型的索引,“myPropertyName”是属性的名称。之后,像使用任何其他 PropertyInfo 对象一样使用它,例如:

myProperty.GetValue(obj); // Where obj is an instance of the generic type

[编辑:下面的原始答案]

如果 Y 必须具有属性,则将类型 T 限制为必须实现包含该属性的接口的类型。例如:

public class MyGenericClass<Y> where Y:IMyInterface

然后将泛型对象转换为接口并调用属性。

于 2012-09-05T02:03:04.687 回答