【发布时间】:2015-11-11 18:39:35
【问题描述】:
当我创建 EventHandler 方法时,我应该如何修复 SonarLint 规则 S1172“应删除未使用的方法参数”。
public void Subscribe()
{
MyEvent += OnMyEvent;
}
public void UnSubscribe()
{
MyEvent -= OnMyEvent;
}
private void OnMyEvent(object sender, EventArgs e)
{
DoSomething();
}
您可以使用 Reactive Extensions 重写代码并制作“Observables”,但这对于简单的事件处理程序来说是相当复杂的解决方案。另一种选择可能是重写代码,如:
public void Subscribe()
{
MyEvent += (s,e) => DoSomething();
}
但接下来的问题是你如何处理UnSubscribe()?我认为未使用的参数不适用于事件处理程序方法。但在 SonarLint 中可能很难检测到。
【问题讨论】:
-
如下所述,将委托存储在字段中是一种选择。但我认为如果这是一种常见情况,我们应该在 SonarLint 中正确处理这个问题。我的感觉是,如果您根本不需要
sender和EventArgs,那么您可以使用没有这些的自定义委托。但这仅在您控制事件类型时才有效。是这样吗?您是否有需要这两个参数的订阅者?您认为这违反事件处理最佳实践吗? -
我认为它的设计准则是事件总是应该是(派生的)
EventHandler类型。这意味着您将始终收到发件人和EventArgs。因此,即使订阅者不使用这些参数,.Net 框架中的所有事件都是使用此范例构建的,因此 SonarLint 应该能够处理此问题。我认为 resharper 正确识别事件处理方法并忽略这些未使用的参数。 -
这似乎是 C# 或 VisualStudio
feature,但确实引发了其他问题,请参阅我的问题:stackoverflow.com/q/41162335/1845672。顺便说一句,github 上的讨论链接已失效
标签: c# visual-studio-2015 sonarlint