1

注意:我写这篇文章是为了记录我的问题的答案,因为我经常发现自己不得不手动研究这个

我正在寻找一种有效的确定性方法来从多播委托中删除委托的所有实例。以tis代码为例:

 Func<int> outputProvider = null;

 Func<int> valueProvider1 = () => 1;
 Func<int> valueProvider2 = () => 2;
 Func<int> valueProvider3 = () => 3;
 
 outputProvider += valueProvider1; 
 outputProvider += valueProvider2;
 outputProvider += valueProvider3;
 outputProvider += valueProvider3;
 
 outputProvider -= valueProvider3;

 var value = outputProvider.Invoke();
 Console.WriteLine("Value: " + value);

即使我删除了提供者 3,输出仍然是 3,是否有一种简单的方法可以删除委托的所有实例?

4

1 回答 1

1

不言自明:

outputProvider = (Func<int>) Delegate.RemoveAll(outputProvider, valueProvider3);
于 2021-03-03T00:05:28.323 回答