【发布时间】:2019-02-13 09:20:11
【问题描述】:
我的一位同事刚刚遇到了一个有趣的问题。我用下面的简单示例代码重新创建了这个问题。问题是编译器抱怨i在第三行使用时可能没有被赋值。
我知道GetProperty 不会被执行,如果o 是null,那么i 将不会被初始化,但在这种情况下我也不会评估int i2 = i;。是否有一些关于选项或空合并操作符的东西我不知道这与这里相关,或者这只是编译器不够聪明的情况,无法知道i 如果未初始化则不使用?
void Test(object o) {
if (o?.GetProperty("Blah", out int i) ?? false) {
int i2 = i;
}
}
【问题讨论】:
-
我认为编译器并不是那么“聪明”。不能断定“空传播程序路径”
object o = null; if(o?.GetProperty("Blah", out int i) ..会被if语句的?? false部分捕获 -
@Piflik 你可以从参数中分离出变量并在那里初始化。
标签: c#