我应该如何修复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中可能很难对其进行检测。
答案 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)
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;
摆脱警告;)