我应该假设sender
(属于CLR事件处理程序)还是d
(属于依赖性事件处理程序)是null
并为此编写一些代码吗?或者我可以简单地将它们标记为[NotNull]
并忽略警告?
我正在使用VS2019 + ReShaper构建C#项目。当R#的“值分析模式”设置为“悲观(假设一个实体没有显式的NotNull
属性时),它会警告sender
和d
null
。
//// R# warns sender can be null.
private void OnSomethingHappened(object sender, EventArgs e) {
//// Should I throw an Exception when sender is null?
//// Or can I simply mark sender as [NotNull]?
}
//// R# warns d can be null.
private static void (DependencyObject d, DependencyPropertyChangedEventArgs e)
{
//// Should I throw an Exception when d is null?
//// Or can I simply mark d as [NotNull]?
}
答案 0 :(得分:0)
写空检查总是安全的:
if(objectThatShouldNotBeNull == null)
{
AppropriateAction();
// if necessary
return;
}
通常,如果它稍后在代码IMO中使用,则必须检查其null
值。
尤其是有时候您或其他开发人员可能想从代码中调用此方法时(有时这样做-然后我遵循上述模式),并将sender
设置为null
。
答案 1 :(得分:0)
每个人都建议我检查一个对象是否为空。因此,IMO,如果我想在方法中使用sender
(或d
),这将是最佳实践。
private void OnSomethingHappened([CanBeNull]object sender, EventArgs e) {
if (!(sender is MyClass mc)) throw new ArgumentException();
mc.DoSomething();
}