gpt4 book ai didi

c# - 我应该假设发件人可以为空吗?

转载 作者:行者123 更新时间:2023-11-30 17:26:31 24 4
gpt4 key购买 nike

我是否应该假设一个sender(CLR 事件处理程序的)或一个d(一个依赖事件处理程序的)是null 并写案例的一些代码?或者我可以简单地将它们标记为 [NotNull] 并忽略警告吗?

我正在使用 VS2019 + ReShaper 构建 C# 项目。当 R# 的“Value Analysis Mode”设置为“Pessimistic(当实体没有显式的 NotNull 属性时假定)”,它会警告 senderd 可以是 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]?
}

最佳答案

每个人都建议我检查一个对象是否为空。因此,IMO,如果我想在方法中使用 sender(或 d),这将是最佳实践。

    private void OnSomethingHappened([CanBeNull]object sender, EventArgs e) {
if (!(sender is MyClass mc)) throw new ArgumentException();

mc.DoSomething();
}

编辑:现在我更喜欢这个:

    private void OnSomethingHappened([CanBeNull]object sender, EventArgs e) {
var mc = sender as MyClass ?? throw new ArgumentException();

mc.DoSomething();
}

关于c# - 我应该假设发件人可以为空吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56391226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com