C#:使用布尔返回类型创建多播委托

Shy*_*yju 12 c# delegates

Hai Techies,

在C#中,我们如何定义接受DateTime对象并返回布尔值的多播委托.

谢谢

Lee*_*Lee 35

public delegate bool Foo(DateTime timestamp);
Run Code Online (Sandbox Code Playgroud)

这是如何使用您描述的签名声明委托.所有代表都可能是多播的,他们只需要初始化.如:

public bool IsGreaterThanNow(DateTime timestamp)
{
    return DateTime.Now < timestamp;
}

public bool IsLessThanNow(DateTime timestamp)
{
    return DateTime.Now > timestamp;
}

Foo f1 = IsGreaterThanNow;
Foo f2 = IsLessThanNow;
Foo fAll = f1 + f2;
Run Code Online (Sandbox Code Playgroud)

呼叫fAll,在这种情况下,将通话双方IsGreaterThanNow()IsLessThanNow().

这样做不会让您访问每个返回值.你得到的只是返回的最后一个值.如果要检索每个值,则必须手动处理多播,如下所示:

List<bool> returnValues = new List<bool>();
foreach(Foo f in fAll.GetInvocationList())
{
    returnValues.Add(f(timestamp));
}
Run Code Online (Sandbox Code Playgroud)