SonarLint 规则 S1172 "Unused method parameters should be removed"和事件处理程序



如何修复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));

相关内容

最新更新