2

私が実行すると:

MethodInfo m = typeof(Expression).GetMethod("Lambda", new Type[]{typeof(Expression), typeof(ParameterExpression[])});

私は得る:

System.Reflection.AmbiguousMatchException: Ambiguous match found.

これは、これを一般的に行うための努力です (文字列であることを知る代わりに)。

var newExpression = Expression.Lambda<Func<T, string>>(propertyExpression, parameters);
return entities.OrderBy(newExpression);

編集:追加情報:

ランニング:

typeof(Expression).GetType().GetMethod("GetMethodCandidates", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(typeof(Expression),new object[]{"Lambda", BindingFlags.Static| BindingFlags.Public, CallingConventions.Standard,new Type[]{typeof(Expression), typeof(ParameterExpression).MakeArrayType()},false})

配列を返します:

[0]: {System.Linq.Expressions.Expression`1[TDelegate] Lambda[TDelegate](System.Linq.Expressions.Expression, System.Linq.Expressions.ParameterExpression[])}
[1]: {System.Linq.Expressions.Expression`1[TDelegate] Lambda[TDelegate](System.Linq.Expressions.Expression, System.Collections.Generic.IEnumerable`1[System.Linq.Expressions.ParameterExpression])}
[2]: {System.Linq.Expressions.LambdaExpression Lambda(System.Linq.Expressions.Expression, System.Linq.Expressions.ParameterExpression[])}
[3]: {System.Linq.Expressions.LambdaExpression Lambda(System.Linq.Expressions.Expression, System.Collections.Generic.IEnumerable`1[System.Linq.Expressions.ParameterExpression])}
4

1 に答える 1

2

残念ながら、ジェネリックが利用可能になる前にリフレクションが作成されたため、ジェネリック メソッド/クラスをまったくサポートしていないことがよくあります。

これと同様の質問が寄せられています (ジェネリック メソッドの GetMethod )。答えは、メソッドの候補を取得し、メソッドのコレクションから必要なメソッドを選択することです。

于 2012-08-24T00:13:33.837 に答える