我有以下的例子類:反思 - 泛型列表調用方法,結果
public class MyClass<T>
{
public IList<T> GetAll()
{
return null; // of course, something more meaningfull happens here...
}
}
而且我想調用GetAll
與反思:
Type myClassType = typeof(MyClass<>);
Type[] typeArgs = { typeof(object) };
Type constructed = myClassType.MakeGenericType(typeArgs);
var myClassInstance = Activator.CreateInstance(constructed);
MethodInfo getAllMethod = myClassType.GetMethod("GetAll", new Type[] {});
object magicValue = getAllMethod.Invoke(myClassInstance, null);
這導致(上以上代碼的最後一行):
無法在ContainsGenericParameters類型或方法上執行後期操作真正。
好的,第二次嘗試:
MethodInfo getAllMethod = myClassType.GetMethod("GetAll", new Type[] {});
getAllMethod = getAllMethod.MakeGenericMethod(typeof(object));
object magicValue = getAllMethod.Invoke(myClassInstance, null);
這導致(在上述第二代碼最後一行):
System.Collections.Generic.IList`1 [T] GETALL ()不是GenericMethodDefinition。 MakeGenericMethod只能在MethodBase.IsGenericMethodDefinition爲true的方法上調用。
我在這做錯了什麼?
'baseRepo'在最後一行來自哪裏?它不應該是'myClassInstance'嗎? – 2012-01-27 15:51:20
您的示例代碼必須在此行中有一個錯誤:MethodInfo getAllMethod = myClassInstance.GetMethod(「GetAll」,new Type [] {}); – usr 2012-01-27 15:52:07
是的,OP可能使用了''myClassType''而不是''構造''。我糾正之後,它爲我工作。 – 2012-01-27 15:53:29