繁体   English   中英

使用genericArguments调用Method上的MethodInfo.Invoke

[英]Call MethodInfo.Invoke on Method with genericArguments

在我的方法上调用MethodInfo.Invoke时,我得到一个InvalidOperation Exception,因为它有通用的Arguments。 在互联网上搜索了几个小时后,我不知道如何解决这个问题。 这是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;
}

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

像这样的东西:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM