想象一下,我有几个具有相同属性的不同类型的类。
我想制作一个通用方法,该方法应访问那些类的属性的值。
以下代码无效,将引发此错误:
无法解析方法'GetValue(T)'(...)
..那么正确的方法是什么?
public static List<int> FooBar<T>(T myObject)
{
var myValue = typeof(T).GetProperty("myList").GetValue(myObject);
return myValue;
}
答案 0 :(得分:3)
执行此操作的“正确”方法可能是拥有一个where T : SomeInterfaceOrBaseType
,即拥有一个myList
成员的东西,然后才可以访问它;即return myObject.myList;
interface IFoo {
List<int> myList {get;}
}
public static List<int> FooBar<T>(T myObject) where T : IFoo {
return myObject.myList;
}
但是...到您完成此操作时,实际上就不再需要该方法了,就好像调用方知道类型为IFoo
一样,他们可以自己完成。 / p>
如果您必须通过反射进行操作...那么,那很难。仅仅滥用dynamic
可能会更容易:
public static List<int> FooBar<T>(T myObject)
{
dynamic obj = myObject;
List<int> myList = obj.myList;
return myList;
}
答案 1 :(得分:1)
如果您真的想使用泛型,请尝试以下代码
return (List<int>)(typeof(T).GetProperty("myList").GetValue(myObject, null))
答案 2 :(得分:1)
您可以这样myObject.GetType().GetProperty("myList").GetValue(myObject, null);