gpt4 book ai didi

c# - ReSharper/C# 中的 "Delegate subtraction has unpredictable result"?

转载 作者:IT王子 更新时间:2023-10-29 03:34:08 25 4
gpt4 key购买 nike

当使用 myDelegate -= eventHandler ReSharper(版本 6)问题时:

Delegate subtraction has unpredictable result

这背后的理性是explained by JetBrains here .这个解释很有道理,在阅读之后,我怀疑我对委托(delegate)的所有使用 -

那么

  • 我可以编写一个非自动事件而不让 ReSharper 脾气暴躁吗?
  • 或者,是否有更好和/或“正确”的方法来实现它?
  • 或者,我可以忽略 ReSharper 吗?

这里是简化的代码:

public delegate void MyHandler (object sender);

MyHandler _myEvent;

public event MyHandler MyEvent
{
add
{
_myEvent += value;
DoSomethingElse();
}
remove
{
_myEvent -= value; // <-- ReSharper warning here
}
}

最佳答案

不要害怕! ReSharper 警告的第一部分仅适用于删除委托(delegate)列表。在您的代码中,您总是要删除一个委托(delegate)。第二部分讨论删除重复委托(delegate)后委托(delegate)的排序。事件不能保证其订阅者的执行顺序,因此它也不会真正影响您。

Since the above mechanics can lead to unpredictable results, ReSharper issues a warning whenever it encounters a delegate subtraction operator.

ReSharper 发出此警告是因为多播委托(delegate)减法可能存在问题,它并不完全谴责该语言功能。幸运的是,这些陷阱出现在边缘案例中,如果您只是检测简单的事件,您不太可能遇到它们。没有更好的方法来实现您自己的 add/remove 处理程序,您只需要注意即可。

我建议将 ReSharper 对该消息的警告级别降级为“提示”,这样您就不会对其警告不敏感,这些警告通常很有用。

关于c# - ReSharper/C# 中的 "Delegate subtraction has unpredictable result"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11180068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com