2012-12-11 36 views
1

如何使用Type.GetMethod()獲取帶有lambda參數的方法?我試圖讓一個像Func這樣的參數的Queryable.Any方法,使用這個:如何使用帶有lambda參數的typeof(object).GetMethod()

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

但它一直返回null。

+0

您的問題應該與Any方法是擴展方法有關。 – Sign

+0

檢查http://stackoverflow.com/questions/2314329/get-method-name-using-lambda-expression和http://stackoverflow.com/questions/273941/get-method-name-and-type-using- lambda表達式 –

+0

[從方法引用C#獲取methodinfo]的可能重複(http://stackoverflow.com/questions/9382216/get-methodinfo-from-a-method-reference-c-sharp) – nawfal

回答

6

有四件事情錯:

  • 有沒有這樣的東西「拉姆達參數」。 Lambda表達式經常被用來提供參數的方法,但他們轉化爲委託或表達式樹
  • 你已經錯過了斷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方法。目前還不清楚你將如何處理它。

+0

謝謝,那確實得到它。是的,對不起,這不是最好的措辭問題。我正在嘗試爲動態任意查詢組合一個表達式。發現如何在這裏 - http://stackoverflow.com/questions/326321/how-do-i-create-this-expression-tree-in-c#326496感謝您的幫助! – NargothBond

相關問題