2009-10-20 22 views
0

我如何可以提供一個FUNC一種方法,所以我可以寫類似:傳遞FUNC直列作爲參數(例如=>一....)

MethodTest(a => a.IsAltTagAvailable); 

如果這種方法的簽名需要一個函數返回一個對象(如HtmlImage)當條件滿足(基本上只是一個謂詞)。

編輯:我需要通過類型我將作爲T(參數)。我忘了這樣做,多笨拙!

感謝

回答

1
void MethodTest(Func<HtmlImage> func) { 

} 
+0

不,這是不行的,在函數功能,T是返回值。 – 2009-10-20 14:04:57

+0

@Stefan:基於我對他想要的問題的理解「這個方法的簽名需要一個返回對象的func」,這與他在代碼中寫入的Lambda相矛盾。 – 2009-10-20 14:13:47

1
public void MethodTest(Func<HtmlImage> delegate) 
{ 
//do what you want 
} 

OR:

public delegate HtmlImageTagHandler(HtmlImage image); 


public HtmlImage MethodTest(HtmlImageTagHandler handler, HtmlImage image) 
{ 
    return handler(image) == true ? image : null; 
} 

使用:

MethodTest(a => a.IsAltTagAvailable, a); 
+0

不,這不起作用,在函數中,T是返回值。 – 2009-10-20 14:05:27

+0

是的,他的問題似乎有點矛盾......至於他想要什麼。 – CSharpAtl 2009-10-20 14:25:45

3

一個謂詞趨於恢復bool,不是對象。當條件不滿足時,你會返回什麼?舉個例子,你並不是指的函數返回的一個對象 - 你的意思是需要一個對象並返回一個bool

請注意,如果您要在lambda表達式中使用參數,則需要使用一個也可以使用參數的委託。

我們確實需要給一個明確的答案之前更多的信息,但你可能想是這樣的:

void MethodTest(Func<HtmlImage, bool> predicate) 

void MethodTest(Predicate<HtmlImage> predicate) 

(我個人比較喜歡使用一個名爲委託的描述性,但其他人更喜歡使用Func/Action幾乎所有東西)。

這是假設輸入類型是固定的。如果沒有,你可能要使它成爲一個通用的方法:

void MethodTest<T>(Predicate<T> predicate) 
1
void MethodTest(Func<HtmlImage, object> func) 
{ 

} 

HtmlImage是函數(x),object返回值,你可以,如果你想指定採取具體類型的參數它。

void MethodTest(Func<HtmlImage, bool> func) 

這是一個謂語:

void MethodTest(Predicate<HtmlImage> func) 

使其充分通用的,與一般的參數替換HtmlImage:

void MethodTest<T>(Predicate<T> func) 
相關問題