【问题标题】:Call MethodInfo.Invoke on Method with genericArguments使用 genericArguments 调用 MethodInfo.Invoke
【发布时间】:2013-01-04 14:49:10
【问题描述】:

在我的方法上调用MethodInfo.Invoke 时,我得到一个InvalidOperation 异常,这是因为它具有通用参数。在互联网上搜索了几个小时后,我不知道如何解决这个问题。这是MethodInfo

object value = null;
if (propertyType.IsClass)
{
    Type primaryKeyType = propertyType.GetPrimaryKeyType();
    object primaryKeyValue = property.Value.ToValue(primaryKeyType);
    MethodInfo GetEntityMethodInfo = typeof(ReportSettingsExtensions)
        .GetMethod("GetEntity", BindingFlags.Static | BindingFlags.InvokeMethod | BindingFlags.NonPublic);
    object entity = propertyType;
    GetEntityMethodInfo.Invoke(entity, new object[] { primaryKeyValue });
    value = entity.GetPrimaryKey();
}

方法如下:

private static T GetEntity<T>(object primaryKeyValue)
{
    T entity = default(T);
    new Storage(storage =>
    {
        entity = storage.Create<T>();
        entity.SetPrimaryKey(primaryKeyValue);
        storage.Load(entity);
    });

    return entity;
}

【问题讨论】:

标签: c# reflection


【解决方案1】:

您需要提供或“关闭”泛型方法参数T,使用MethodInfo.MakeGenericMethodMSDN

类似这样的:

MethodInfo getEntity =
  GetEntityMethodInfo.MakeGenericMethod( ... whatever T should be ... );

var entity = getEntity.Invoke( null, new object[] { primaryKeyValue } );

您应该将null 作为第一个参数传递给Invoke,因为该方法是static,因此没有对象引用。

【讨论】:

  • 它仍然不能完全工作,但这个答案有很大帮助,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多