我正在使用 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);
}
}
所以基本上,我想知道如何让它忽略参数类型并调用对象的方法,任何建议?
最佳答案
我怀疑你想要一些类似(伪代码,非常简化)的东西:
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);