以下代码
Func<int, int> DoWork;
DoWork = x => x + 5; // ignored
DoWork += y => y + 1; // used
Console.WriteLine(DoWork(2)); // 2 + 1 = 3
Run Code Online (Sandbox Code Playgroud)
返回3,因为只处理最新添加的lambda - 以前的方法被忽略.如果是Action<>,则正在处理所有方法.
问题:是否有一个用于"添加"/ Delegate.CombineFuncs 的用例,当我每次添加另一个委托时覆盖之前的那些?
"以前的"不会被覆盖.它们都将被调用,但只返回最后一个的返回值.
C#规范(15.4委托调用)解释了它:
如果委托调用包括输出参数或返回值,则它们的最终值将来自列表中最后一个委托的调用.
要测试它,请尝试以下方法:
DoWork = x => { Console.WriteLine(x + 5); return x + 5; };
DoWork += y => { Console.WriteLine(y + 1); return y + 1; };
Console.WriteLine(DoWork(2)); // 2 + 1 = 3
Run Code Online (Sandbox Code Playgroud)
它会打印出来
7
3
3
Run Code Online (Sandbox Code Playgroud)
最常见的用例可能是使用订阅同一事件的多个事件处理程序.
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |