gpt4 book ai didi

c# - 可空引用类型意外 CS8629 可空值类型可能为空且带有临时变量

转载 作者:太空狗 更新时间:2023-10-30 01:28:47 25 4
gpt4 key购买 nike

在 C# 8 项目中,我正在使用可为 null 的引用类型并收到意外(或者至少对我来说是意外的)CS8629 警告,

bool singleContent = x.DataInt != null;
bool multiContent = x.DataNvarchar != null;

if (singleContent && multiContent)
{
throw new ArgumentException("Expected data to either associate a single content node or " +
"multiple content nodes, but both are associated.");
}

if (singleContent)
{
var copy = x.DataInt.Value; // CS8629 here
newPropertyData.DataNvarchar = $"umb://{type.UdiType}/{Nodes[copy].UniqueId.ToString("N")}";
}

我决定使用 GetValueOrDefault() 作为解决方法,但我想知道如何向编译器证明 x.DataInt 不能如果选中 singleContent,则为 null。

注意x.DataInt的类型是int?

最佳答案

这只是一个临时答案,直到可空引用类型的设计者之一 Julien Couvreur 发布了确定的答案(唠叨)。我将其发布在这里是因为一旦 C# 8 发布,该问题将再次被提出。

正如 Julien 在 3 个 Github 问题中的回答 #34800 , #37032#36149这是 C# 8 分析器的一个已知限制,它超出了 C# 8 的范围。

这需要别名分析(这里只是猜测)意味着分析器将能够分析别名表达式,即结果“隐藏”在临时变量(也可能是参数?)后面的表达式。

也许我们可以在线询问他或 Mads Torgersen 何时在 .NET Conf 2019 期间发布 .NET Core 3关于发布日期(完全不是唠叨)

关于c# - 可空引用类型意外 CS8629 可空值类型可能为空且带有临时变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57432944/

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