0

私はリフレクションが初めてで、以下のコードを試していました

var queryableLastMethodInfo = typeof(Queryable).GetMethod("Last", new Type[]{ typeof(IQueryable<>) });

ただし、queryableLastMethodInfoは常にnullを返します。

助けていただけますか?

4

3 に答える 3

3

これにより、述語を取らない "Last" 拡張メソッドの MethodInfo が得られるはずです。

var queryableLastMethodInfo = typeof(Queryable).GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
    .FirstOrDefault(x => x.Name == "Last" && x.GetParameters().Count() == 1);

...そして、これはあなたに他のものを与えるはずです:

var queryableLastMethodInfo = typeof(Queryable).GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic)
    .FirstOrDefault(x => x.Name == "Last" && x.GetParameters().Count() == 2);
于 2016-12-26T18:38:49.207 に答える
1

すべてのLastメソッドを見つけて、パラメーターが 1 つだけのメソッドを選択できます。

var method = typeof (Queryable).GetMethods()
                               .Where(m => m.Name == "Last")
                               .First(m => m.GetParameters().Length == 1);

一般的なケースは、この質問と回答で説明されています。

于 2016-12-26T18:37:21.897 に答える
0

Queryable が "Last" と呼ばれる新しいメソッドを受け取り、パラメーターを 1 つしかとらない場合、コードが失敗するリスクを冒さないでください。

正確さは決してそれほどではありません。

var queryableLastMethodInfo = typeof(Queryable).GetMethods().Single(_Method => _Method.Name == "Last" && _Method.IsGenericMethod && _Method.GetGenericArguments().Length == 1 && _Method.GetParameters().Length == 1   && _Method.GetParameters().Single().ParameterType == typeof(IQueryable<>).MakeGenericType(_Method.GetGenericArguments().Single()));
于 2016-12-26T18:58:05.117 に答える