调用对象方法,不管参数类型如何
本文关键字:类型 参数 不管 对象 方法 调用 | 更新日期: 2023-09-27 17:53:33
我使用DynamicObject来包装内部对象和掩码泛型,但是当我试图调用内部对象上的某些方法时,它们需要类型化参数,但是我将所有参数视为类型对象,因此调用失败。
代码:public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
try
{
result = mInternalObject.GetType().InvokeMember(binder.Name, (BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public), null, mInternalObject, args);
return true;
}
catch (Exception)
{
return base.TryInvokeMember(binder, args, out result);
}
}
所以基本上,我想知道如何使它忽略参数类型和调用方法与对象,任何建议?
我怀疑您想要的内容是这样的(psuedo代码,非常简化):
var mem = internalObject.GetType().GetMember(binder.Name);
if (mem.IsGenericDefinition)
mem = mem.MakeGeneric(Array.Convert(args, x => x.GetType()));
var result = mem.Invoke(null, internalObject, args);
由于您使用的是动态的,所以您可以使用来自开源ImpromptuInterface项目的真正的后期绑定,而不是反射。它比反射更快,并且可以处理更多类型的对象(例如其他动态对象),并且可以推断泛型,同时也允许您指定,使一切变得更简单。