0

创建 EventHandler 方法时,我应该如何修复 SonarLint Rule 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 中可能很难检测到这一点。

4

1 回答 1

1

如果您需要取消订阅,则需要存储委托(删除静态以获得正确的代码,这是从被黑的控制台应用程序项目中粘贴的):

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));

摆脱警告;)

于 2015-08-18T17:47:08.473 回答