提问人:TechDogLover OR kiaNasirzadeh 提问时间:6/27/2022 更新时间:6/27/2022 访问量:206
可为 null 的上下文在 C 中无法正常工作#
nullable context doesn't work properly in c#
问:
我完全了解 nullabe 上下文以及如何在 C# 中处理它,即使这样,我也查看了这个 Microsoft 官方教程以及 stackoverflow 上的这个问题,但有一件事我真的无法弄清楚为什么!??
在启用了 null 上下文的代码中,以下代码工作正常且没有问题:
List<DateStepStatus> OperationOnTimeLine_success (List<DateStepStatus> timeLine)
{
for (int i = 0; i < timeLine.Count; i++)
{
DateTime dateTime = timeLine[i].dateTime;
if (DateTime.Today >= dateTime)
{
var abc = timeLine[i].stepStatus;
if (abc is not null)
{
abc.Status = Status.Succeed;
}
}
else continue;
}
return timeLine;
}
但是这段代码有一个警告:
List<DateStepStatus> OperationOnTimeLine_success (List<DateStepStatus> timeLine)
{
for (int i = 0; i < timeLine.Count; i++)
{
DateTime dateTime = timeLine[i].dateTime;
if (DateTime.Today >= dateTime)
{
if (timeLine[i].stepStatus is not null)
{
timeLine[i].stepStatus.Status = Status.Succeed;// bad-green warning goes under "timeLine[i].stepStatus" part
}
}
else continue;
}
return timeLine;
}
这真的很烦人!如果我只是使用 VAR(如 ABC),警告就会消失,但如果我想直接做同样的事情,警告又回来了!
答:
2赞
Klaus Gütter
6/27/2022
#1
C# 语言不保证在多次调用 getter 时该属性返回相同的值。因此,对它进行一次 null 检查并不能证明它第二次不会为 null。stepStatus
评论
stepStatus