调用对象方法,不管参数类型如何

本文关键字:类型 参数 不管 对象 方法 调用 | 更新日期: 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项目的真正的后期绑定,而不是反射。它比反射更快,并且可以处理更多类型的对象(例如其他动态对象),并且可以推断泛型,同时也允许您指定,使一切变得更简单。