我如何可以提供一個FUNC一種方法,所以我可以寫類似:傳遞FUNC直列作爲參數(例如=>一....)
MethodTest(a => a.IsAltTagAvailable);
如果這種方法的簽名需要一個函數返回一個對象(如HtmlImage)當條件滿足(基本上只是一個謂詞)。
編輯:我需要通過類型我將作爲T(參數)。我忘了這樣做,多笨拙!
感謝
我如何可以提供一個FUNC一種方法,所以我可以寫類似:傳遞FUNC直列作爲參數(例如=>一....)
MethodTest(a => a.IsAltTagAvailable);
如果這種方法的簽名需要一個函數返回一個對象(如HtmlImage)當條件滿足(基本上只是一個謂詞)。
編輯:我需要通過類型我將作爲T(參數)。我忘了這樣做,多笨拙!
感謝
void MethodTest(Func<HtmlImage> func) {
}
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);
不,這不起作用,在函數
是的,他的問題似乎有點矛盾......至於他想要什麼。 – CSharpAtl 2009-10-20 14:25:45
一個謂詞趨於恢復bool
,不是對象。當條件不滿足時,你會返回什麼?舉個例子,你並不是指的函數返回的一個對象 - 你的意思是需要一個對象並返回一個bool
。
請注意,如果您要在lambda表達式中使用參數,則需要使用一個也可以使用參數的委託。
我們確實需要給一個明確的答案之前更多的信息,但你可能想是這樣的:
void MethodTest(Func<HtmlImage, bool> predicate)
或
void MethodTest(Predicate<HtmlImage> predicate)
(我個人比較喜歡使用一個名爲委託的描述性,但其他人更喜歡使用Func
/Action
幾乎所有東西)。
這是假設輸入類型是固定的。如果沒有,你可能要使它成爲一個通用的方法:
void MethodTest<T>(Predicate<T> predicate)
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)
不,這是不行的,在函數功能,T是返回值。 –
2009-10-20 14:04:57
@Stefan:基於我對他想要的問題的理解「這個方法的簽名需要一個返回對象的func」,這與他在代碼中寫入的Lambda相矛盾。 – 2009-10-20 14:13:47