3

この質問と同じように、「params」キーワードを持つメソッドの呼び出しに問題があります。TargetParameterCountException 例外が発生し続けます。「パラメータ数の不一致」。目標は、パラメーターなしでこのメソッドを呼び出すことです。

IList<T> List(params Expression<Func<T, object>>[] includeProperties);

これが私がこれまでに持っているものです:

        //Get generic type
        var entityType = typeof(Applicant).Assembly.GetType(string.Format("Permet.BackEnd.ETL.Domain.Models.{0}", tableName));
        //create service that will receive the generic type
        var constructedIService = typeof(IService<>).MakeGenericType(entityType);

        //create the argument for the method that we invoke
        var paramsType = typeof(Expression<>).MakeGenericType(typeof(Func<,>).MakeGenericType(entityType, typeof(object))).MakeArrayType();

        //instantiate the service using Unity (todo: fix singleton)
        var serviceInstance = UnitySingleton.Container.Resolve(constructedIService, "");

        //Invoke the service method "List" by passing it no parameters but telling it the signature to use (it has no overloads)
        //I tried without listing the params since it has no overload but same exception
        //I get exception Parameter count mismatch here
        dynamic data = serviceInstance.GetType().GetMethod("List", new Type[] { paramsType }).Invoke(serviceInstance, new object[] { });

null を渡すだけでオーバーロード GetMethod(string name) を使用してまったく同じ結果が得られたことに注意してください。

4

1 に答える 1

5

C# コンパイラは からへnullのメソッド シグネチャとそのメソッドへの呼び出しを書き換えるため、1 つのパラメーターで呼び出してみてください。method(params object[] parameters)method(object[] parameters)

dynamic data = serviceInstance.GetType().GetMethod("List", new Type[] { paramsType }).Invoke(serviceInstance, new object[] { null });
于 2013-05-27T17:03:26.287 に答える