所以我坚持修复/维护另一个程序员代码(blech)
我是一个坚定的教授"如果它没有破坏不修复它!" 因此,每次遇到可怕的代码时,我都希望改变一些东西,我只限于改变可能的绝对最小代码量以进行必要的修复.但在某些情况下,我真的需要先了解一些事情,然后再尝试遵循它/改变它.
我在这里看到了这一点:
region.LineSelected = (x) => { };
我想知道它是否与此相同:
region.LineSelected = null;
在我改变它的方法之前,我希望100%肯定第一条线在做什么.
根据我目前对该主题的意见进行编辑
他们不一样.lambda版本正在为一个空的匿名方法添加一个事件处理程序.这允许其他代码自由地引发LineSelected()而不用担心它是否为null(即没有监听器).
例如.
var lineSelected = this.LineSelected; if (lineSelected != null) { lineSelected(EventArgs.Empty); }
如果在if之后但在引发事件之前在另一个线程中从LineSelected取消订阅,则上述语句可以抛出NullReferenceException.将LineSelected分配给临时变量,然后提升它可以调用未订阅的事件侦听器.将事件处理程序分配给局部变量是处理空委托的推荐方法.
通过添加一个空委托,其他代码总是能够调用LineSelected而不必担心NullReferenceException.通过将多播事件委托分配给局部变量,可以确保该值不能被另一个线程修改.