0

InvalidOperationメソッドを呼び出すと例外が発生しMethodInfo.Invokeます。これは、メソッドに汎用引数があるためです。インターネットで何時間も検索した後、私はこの問題を解決する方法がわかりません。これが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;
}
4

1 に答える 1

2

MSDNTを使用して、ジェネリックメソッドパラメーターを提供または「閉じる」必要がありますMethodInfo.MakeGenericMethod

このようなもの:

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

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

メソッドにはオブジェクト参照がないためnull、最初のパラメーターとして渡す必要があります。Invokestatic

于 2013-01-04T15:36:37.343 に答える