如何修复SonarLint规则S1172 "未使用的方法参数应被删除"当我创建EventHandler方法
public void Subscribe()
{
MyEvent += OnMyEvent;
}
public void UnSubscribe()
{
MyEvent -= OnMyEvent;
}
private void OnMyEvent(object sender, EventArgs e)
{
DoSomething();
}
你可以用响应式扩展重写代码并创建"可观察对象",但对于简单的事件处理程序来说,这是相当复杂的解决方案。另一种方法是将代码重写为:
public void Subscribe()
{
MyEvent += (s,e) => DoSomething();
}
但问题是你如何做UnSubscribe()
?在我看来,未使用的参数不适用于事件处理程序方法。但是在SonarLint中可能很难检测到。
如果你需要取消订阅,你需要存储委托(删除静态代码,这是从一个被黑客入侵的控制台应用程序项目中粘贴的):
public static event EventHandler TestEvent;
private static EventHandler saved = (s, e) => DoSomething();
static void Main(string[] args)
{
TestEvent += saved;
TestEvent -= saved;
}
internal static void DoSomething()
{
}
或者使用批量退订:
foreach (Delegate d in TestEvent.GetInvocationList())
{
TestEvent -= (EventHandler)d;
}
或者如果你拥有这个事件,你也可以用这个来取消订阅:
TestEvent = null;
或者只是使用您一直使用的语法并创建一个非匿名方法,如上所示。这种语法没有问题。你可以强制执行
if (sender == null)
throw ArgumentNullException(nameof(sender));