4th*_*ace 2 .net generics predicate .net-3.5
Predicate可以在.NET的任何地方使用吗?从MSDN http://msdn.microsoft.com/en-us/library/bfcke1bz.aspx,我在任何地方都看不到谓词.我看到一个匿名者返回一个布尔值但没有泛型或"Predicate"关键字.
您可以将其用作类型然后传入,而不是内联谓词的委托.这是一个示例:
var list = new List<int>();
list.AddRange(Enumerable.Range(1, 10));
Predicate<int> p = delegate(int i)
{
return i < 5;
};
list.RemoveAll(p);
list.ForEach(i => Console.WriteLine(i));
Run Code Online (Sandbox Code Playgroud)
编辑:要使用现有方法声明谓词,您将使用:
Predicate<int> p = IsLessThanFive;
public bool IsLessThanFive(int number)
{
return number < 5;
}
Run Code Online (Sandbox Code Playgroud)
更常见的替代方案是:
list.RemoveAll(delegate(int i) { return i < 5; });
// or...
list.RemoveAll(i => i < 5);
Run Code Online (Sandbox Code Playgroud)
编辑:在对另一篇文章的评论中回答您的其他问题,委托是一种定义方法签名的类型,可用于将方法作为参数传递给其他方法.如果您对C++有点熟悉,它们就像函数指针一样.有关代表的更多信息,请查看此MSDN页面.