【发布时间】:2019-08-07 23:22:59
【问题描述】:
使用这个结构:
var dict = new Dictionary<int, string>();
var result = (dict?.TryGetValue(1, out var value) ?? false) ? value : "Default";
我收到一条错误消息 CS0165 use of unassigned local variable 'value',这不是我所期望的。 value 怎么可能是未定义的?如果字典为 null,则内部语句将返回 false,这将使外部语句评估为 false,返回 Default。
我在这里缺少什么?仅仅是编译器无法完全评估该语句吗?还是我搞砸了?
【问题讨论】:
-
特殊状态“在真表达式后确定分配”或“在假表达式后确定分配”仅针对有限数量的运算符进行跟踪。据我了解,
?.和??不在其中。你可以改用(dict != null && dict.TryGetValue(1, out var value)) ? value : "Default"。 -
是的,我就是这样做的,我还创建了一个扩展方法来简化事情。能够在例如 Linq Query 语法中使用这样的结构而不需要额外的扩展方法会很好。
标签: c# out null-coalescing