我正在使用 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);

10-08 14:09