MethodInfo打电话.用泛型参数调用方法

本文关键字:调用 方法 参数 泛型 打电话 MethodInfo | 更新日期: 2023-09-27 17:50:37

在我的方法上调用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;
}

MethodInfo打电话.用泛型参数调用方法

您需要使用MethodInfo.MakeGenericMethod (MSDN)提供或"关闭"通用方法参数T

像这样:

MethodInfo getEntity =
  GetEntityMethodInfo.MakeGenericMethod( ... whatever T should be ... );
var entity = getEntity.Invoke( null, new object[] { primaryKeyValue } );

你应该把null作为第一个参数传递给Invoke,因为方法是static,所以没有对象引用。