SonarLint规则S1172"应删除未使用的方法参数"和EventHandlers

时间:2015-08-18 17:30:48

标签: c# visual-studio-2015 sonarlint

我应该如何修复SonarLint规则S1172"应该删除未使用的方法参数"当我创建EventHandler方法时。

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中可能很难对其进行检测。

1 个答案:

答案 0 :(得分:1)

如果您需要取消订阅,则需要store the delegate(删除静态以获取正确的代码,这是从黑客入侵的控制台应用项目中粘贴的):

C:\MY-APP\dataService>node dataAPI.js
C:\MY-APP\node_modules\socket.io\node_modules\socket.io-adapter\node_modules\socket.io-parser\binary.js:10
socket.io\node_modules\socket.io-adapter\node_modules\socket.io-parser
   ^^^
 SyntaxError: Unexpected token ILLEGAL
 at exports.runInThisContext (vm.js:73:16)
 at Module._compile (module.js:443:25)
 at Object.Module._extensions..js (module.js:478:10)
 at Module.load (module.js:355:32)
 at Function.Module._load (module.js:310:12)
 at Module.require (module.js:365:17)
 at require (module.js:384:17)
 at Object.<anonymous> (C:\MY-APP\node_modules\socket.io\node_modules\soc
 ket.io-adapter\node_modules\socket.io-parser\index.js:10:14)
 at Module._compile (module.js:460:26)
 at Object.Module._extensions..js (module.js:478:10)

或使用a mass-unsubscribe

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;

摆脱警告;)