代表,是的,我正在尝试理解这个概念的使用,它在C#中有什么问题需要解决。到目前为止,我真的很喜欢它提供代码的Decoupling工具。然后我遇到了谓词代表。根据{{3}}。
它还说,这个特定的代表采用泛型,<T>
,可以说任何类型......
说Predicate Delegate只是一个布尔代表是正确的吗?这意味着任何具有布尔返回类型的委托?或者还有更多用于指定不同名称:Predicate Delegates ..?
E.g。
delegate bool BooleanDelegate(anytype parameter);
BooleanDelegate bd = new BooleanDelegate(yesno);
//assuming parameter type is int
MessageBox.Show(bd.Invoke(2).ToString());
public bool yesno(anytype parameter)
{
If (parameter == 2)
{
return true;
}
Else
{
return false;
}
}
答案 0 :(得分:3)
通常,谓词是布尔值函数。所以,是的,任何返回布尔值的函数都是谓词。
答案 1 :(得分:2)
是的,Predicate<T>
代表一种方法,它接受T
类型的一个参数,并返回bool
。例如,Predicate<string>
表示接受string
并返回bool
的方法。
例如:
Predicate<string> p = String.IsNullOrEmpty; // this static method has the correct signature and return type
你可以说
bool answer = p("your words");
泛型意味着T
在不同情况下可能具有不同的含义。因此,您不必制作一大堆代理类型,例如StringPredicate
,DateTimePredicate
,BicyclePredicate
等,但您可以使用Predicate<DateTime>
,{{1 ,},
Predicate<Bicycle>
具有与Predicate<T>
相同的签名和返回类型(在.NET 3.5版中引入)。两者都是Func<T, bool>
中的逆变。
您:
说Predicate Delegate只是一个布尔代表是正确的吗?
它的签名必须正确。必须有一个参数(不是零,或两个或更多)。参数不得为T
或ref
。参数必须具有正确的类型out
(但T
的含义可能不同)。例如,接收T
的方法可以是Bicycle
,但不能是Predicate<Bicycle>
。