gpt4 book ai didi

c# - `out` 变量未分配...除非条件是内联的?

转载 作者:太空宇宙 更新时间:2023-11-03 22:32:22 24 4
gpt4 key购买 nike

<分区>

我试图了解 C# 编译器的规则是什么来决定何时 out变量被赋值。

这是一个让我感到困惑的例子。假设我们有一个 Dictionary<> :

var dict = new Dictionary<string, string>();

让我们从一个简单的条件开始:这个编译。

var found = dict.TryGetValue("b", out var val);
if(found)
{
Console.WriteLine(val); //no problem
}

如果条件稍微复杂一点,就是编译错误:

var aBool = true;
var found = aBool && dict.TryGetValue("b", out var val);
if(found)
{
Console.WriteLine(val); //use of unassigned local variable val
}

好的,所以我猜编译器在这种情况下不处理逻辑运算符。
...但是如果我们移动内联完全相同的条件,它又是彩虹了:

var aBool = true;
if(aBool && dict.TryGetValue("b", out var val))
{
Console.WriteLine(val); //compiles fine
}

为什么?

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