2011-06-17 9 views
4

私はLinq式を構築していて、IEnumerable.DefaultIfEmptyhttp://msdn.microsoft.com/en-us/library/bb360179.aspx)のMethodInfoを取得しようとしています。何が簡単な仕事だったように思えますが、私はそれがうまくいかない理由は断ります。Enumerable.DefaultIfEmptyのmethodinfoを取得

typeof(Enumerable).GetMethod("DefaultIfEmpty", new[] { typeof(IEnumerable<>) }); 

typeof(Enumerable).GetMethod("DefaultIfEmpty", new[] { typeof(IEnumerable<>).MakeGenericType(typeof(WorkitemListModel)) }); 
+0

関連性はありますが、関連性はありません:http://stackoverflow.com/questions/3631547/select -right-generic-method-reflection/3632196#3632196 – LukeH

+0

@LukeHこれは興味深い解決策でした。:) –

答えて

5

一般的な方法を取得することは正直言って痛みです。私が使用するより良い方法を知らない:

var method = typeof(Enumerable).GetMethods() 
           .Where(m => m.Name == "DefaultIfEmpty") 
           .Where(m => m.GetParameters().Length == 1) 
           .Single(); 

GetMethodを呼び出すには、パラメータの右のジェネリック型パラメータを含む正確な正しいパラメータ型を持つ必要があるだろう。一度あなたはを一度にすることができますが、それまでは私は上記がすべて利用可能であると考えています:(

関連する問題