可以将谓词委托简单地称为布尔委托吗?

时间:2013-02-23 20:37:25

标签: c# delegates boolean predicate

代表,是的,我正在尝试理解这个概念的使用,它在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;
    }     
}

2 个答案:

答案 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在不同情况下可能具有不同的含义。因此,您不必制作一大堆代理类型,例如StringPredicateDateTimePredicateBicyclePredicate等,但您可以使用Predicate<DateTime>,{{1 ,},

Predicate<Bicycle>具有与Predicate<T>相同的签名和返回类型(在.NET 3.5版中引入)。两者都是Func<T, bool>中的逆变。

您:

  

说Predicate Delegate只是一个布尔代表是正确的吗?

它的签名必须正确。必须有一个参数(不是零,或两个或更多)。参数不得为Tref。参数必须具有正确的类型out(但T的含义可能不同)。例如,接收T的方法可以是Bicycle,但不能是Predicate<Bicycle>