gpt4 book ai didi

c# - 使用未初始化的变量 - 编译器已损坏

转载 作者:行者123 更新时间:2023-11-30 19:02:43 26 4
gpt4 key购买 nike

明显标题有点tongue in cheek ,但我已经检查并仔细检查了,但我看不到我的逻辑中的错误。

编译器提示变量 parsed 可能没有在 return 语句中初始化。我不同意。我们谁错了,为什么?

public DateTime? Test(string nextDate)
{
DateTime parsed;

if (nextDate != "TBC" && !DateTime.TryParse(nextDate, out parsed))
{
throw new Exception();
}

if (nextDate == "TBC")
return null;

return parsed;
}

最佳答案

不,编译器根本没有损坏。

编译器并不意味着能够告诉它

if (nextDate != "TBC")

if (nextDate == "TBC")

是互斥的。它不会尝试在这两个条件之间建立任何联系。因此,它无法确定您肯定已经调用了DateTime.TryParse(nextDate, out parsed),如果您达到了return parsed;.

基本上,编译器遵循相对简单的规则来确定明确的分配(和可达性)。简单的规则易于推理、易于实现且易于编写代码。

幸运的是,您可以使代码更简单同时编译:

public DateTime? Test(string nextDate)
{
if (nextDate == "TBC")
{
return null;
}

DateTime parsed;
if (!DateTime.TryParse(nextDate, out parsed))
{
throw new Exception();
}
return parsed;
}

现在我们在开始的一个处处理“TBD”的“特殊情况”——然后我们可以忽略其余代码的特殊情况并调用 TryParse 无条件地离开 parsed 绝对分配。

关于c# - 使用未初始化的变量 - 编译器已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9514019/

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