gpt4 book ai didi

c# - 可为空的引用类型和本地函数——它们一起玩得好吗?

转载 作者:行者123 更新时间:2023-11-30 22:55:10 25 4
gpt4 key购买 nike

我在玩 VS2019,在现有代码体上尝试新的 C#-8 功能。我接手了一个小项目并继续将其转换为使用新的可空引用类型功能。在这个过程中,我遇到了这个案例:

using System;

#nullable enable

namespace NullableRefTest
{
class Demo
{
public string? Property { get; set; }

public int Test()
{
if (null == Property) // 1
throw new InvalidOperationException();

int f()
{
return Property.Length; // 2
}

return f();
}
}
}

在启用 C#-8 的情况下编译它会生成 CS8602 可能取消引用//2 上的空引用警告。

现在,我要坚持,这里显然不可能存在空引用 - f() 的可见性和生命周期使得它不可能在//1 处的空引用测试之前被调用。

我假设警告的出现是因为本地函数实际上是如何通过将它们提升到匿名类来实现的,并且在该类中被认为是脱离上下文的,这确实是一个可能的空引用。

这只是编译器尚未正确处理的情况,还是这里有更阴险的东西说应该保留此警告?

最佳答案

当您确信变量不能为 null 时,您可以使用 ! ( null-forgiving operator ) 来覆盖编译器行为。

  int f()
{
return Property!.Length; // 2
}

关于c# - 可为空的引用类型和本地函数——它们一起玩得好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55522548/

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