1

Type.GetMethod()を使用してラムダパラメーターを持つメソッドを取得するにはどうすればよいですか?これを使用して、FuncのようなパラメータのQueryable.Anyメソッドを取得しようとしています。

typeof(Queryable).GetMethod("Any", new Type[]{typeof(Func<ObjType, bool>)})

しかし、それはnullを返し続けます。

4

1 に答える 1

6

間違っていることが4つあります。

  • 「ラムダパラメーター」のようなものはありません。ラムダ式はメソッドに引数を提供するためによく使用されますが、デリゲートまたは式ツリーに変換されます
  • Queryable.Any-の最初のパラメータを見逃しましたIQueryable<T>
  • 式ツリータイプではFunc<ObjType, bool>なく、デリゲートタイプを使用していますExpression<Func<ObjType, bool>>
  • 残念ながら、そのようにジェネリックメソッドを取得することはできません。

あなたが欲しい:

var generic = typeof(Queryable).GetMethods()
                               .Where(m => m.Name == "Any")
                               .Where(m => m.GetParameters().Length == 2)
                               .Single();
var constructed = generic.MakeGenericMethod(typeof(ObjType));

これで、適切Anyな方法が得られるはずです。それで何をするのかは明確ではありません。

于 2012-12-11T14:07:39.357 に答える