【发布时间】:2023-01-30 18:25:29
【问题描述】:
我需要使用动态对象创建泛型类的实例
使用以下代码示例
using System;
using System.Dynamic;
public class Program
{
public static void Main()
{
dynamic obj = new ExpandoObject();
obj.num = 1;
obj.str = "a";
Type t = obj.GetType();
Type myType = typeof(RulesService<>).MakeGenericType(t);
object instance = Activator.CreateInstance(myType, 999);
myType.GetMethod("GetMatchingRules")
.Invoke(instance, obj);
}
}
public class RulesService<T>
{
private readonly int _retNum = 0;
public RulesService(int retNum)
{
_retNum = retNum;
}
public int GetMatchingRules(T objectToMatch)
{
Console.WriteLine("GetMatchingRules");
return _retNum;
}
}
并获得下一个例外
未处理的异常。 Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:“System.Reflection.MethodBase.Invoke(object, object[])”的最佳重载方法匹配有一些无效参数 在 CallSite.Target(闭包,CallSite,MethodInfo,对象,对象) 在 System.Dynamic.UpdateDelegates.UpdateAndExecuteVoid3[T0,T1,T2](CallSite 站点,T0 arg0,T1 arg1,T2 arg2) 在 Program.Main()
【问题讨论】:
-
您是否尝试过在
Invoke中显式创建object[]?myType.GetMethod("GetMatchingRules").Invoke(instance, new object[] { obj });