2010-05-20 23 views
1

我有一個Get方法MyType1接受Func<MyType2, bool>作爲參數。在運行時檢查lambda表達式在C#

其使用的一個例子:

mytype1Instance.Get(x => x.Guid == guid)); 

我想創建檢查輸入lambda表達式,並確定什麼的​​值是方法Get的存根實現。很明顯,lambda可能是「任何東西」,但我很樂意爲這個存根做出關於lambda的假設,它試圖匹配Guid屬性。

我該怎麼做?我懷疑它涉及到使用內置的Expression類型?

+0

另請參閱http://stackoverflow.com/questions/2228845/is-it-possible-with-moq-to-stub-method-calls-with-lambda-parameters – Ben 2010-05-20 12:41:59

回答

2

看一看Typed Reflector,這是一個簡單的單源文件組件,它提供從強類型成員訪問的橋樑,相應的MemberInfo實例。

即使你可能無法使用它作爲,就應該給你,你可以使用表達式做一個好主意。

+0

謝謝,看起來很有用。目前正努力將Func 轉換爲Expression進行分析。 – Ben 2010-05-20 11:07:10

+2

@Ben:我不認爲你總是需要立即將lambda表達式初始化爲表達式。將Func(編譯的IL代碼)轉換爲Expression基本上是反編譯,這很難並且可能不被支持。請記住,lambda表達式本身不是Func或任何其他委託類型。只有當你將它們分配給一個變量或將它們傳遞給一個方法時,它們才能獲得它們的具體含義。因此,leppie的答案。 – Joren 2010-05-20 11:23:59

+0

轉換函數求,F,於表達,例如:'表達> E = X => F(X);' – Ben 2010-05-20 12:16:13

2
public void Get<T>(Expression<Func<T,bool>> expr) 
{ 
    // look at expr 
}