鉴于此代码:
private void TryIt(Dictionary<int, int> myDict)
{
if (myDict?.TryGetValue(1, out int myValue) ?? false)
{
Console.Out.WriteLine(myValue); // <-- Error CS0165
}
}
c# 编译器发出:
error CS0165: Use of unassigned local variable 'myValue'
但显然无法引用操作员myValue
何时TryGetValue()
跳过调用?.
。这是因为结果null
被转换为false
by ?? false
。
换句话说,如果myDict
是null
,?.
操作员将跳过对 的调用TryGetValue()
,保持myValue
未分配状态。我明白了。
但是,??
操作员将始终评估空传播到false
,在这种情况下防止进入 if 块。
这在编译时很明显,那么为什么会出现错误?
我怀疑这可能与所有这些语法糖最终如何解开到实际的 .NET p 代码中有关,但出错似乎仍然是错误的......
不使用.?
运算符时,我没有收到任何错误,这是预期的:
if (myDict.TryGetValue(1, out int myValue))
{
Console.Out.WriteLine(myValue); // <-- NO ERROR
}
只是当我使用.?
with时?? false
。