将func内联作为参数传递(例如a => a ....)

时间:2009-10-20 13:56:55

标签: c#

如何为方法提供func,所以我可以编写如下内容:

MethodTest(a => a.IsAltTagAvailable);

此方法的签名采用func,当条件满足时(基本上只是谓词)返回一个对象(比如说HtmlImage)。

编辑:我需要将我将要处理的类型作为T(参数)传递。我忘了这么做,多么笨拙!

由于

4 个答案:

答案 0 :(得分:3)

谓词往往会返回bool,而不是对象。当条件不满足时你会回来什么?举个例子,你并不是指函数返回一个对象 - 你的意思是接受一个对象并返回一个bool

注意,如果你要在lambda表达式中有一个参数,你需要使用一个带参数的委托。

在给出明确答案之前,我们确实需要更多信息,但您可能需要以下内容:

void MethodTest(Func<HtmlImage, bool> predicate)

void MethodTest(Predicate<HtmlImage> predicate)

(我个人喜欢使用命名委托的描述性质,但其他人更喜欢使用Func / Action来处理几乎所有事情。)

假设输入类型是固定的。如果没有,您可能希望将其作为通用方法:

void MethodTest<T>(Predicate<T> predicate)

答案 1 :(得分:1)

void MethodTest(Func<HtmlImage> func) {

}

答案 2 :(得分: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);

答案 3 :(得分: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)