为什么允许我们在条件运算符的 else 子句中使用由 "is" 表达式定义的参数?

Why are we allowed to use a parameter defined by an "is" expression in the else clause of a conditional operator?

示例:

int a = 3;
int b = 4;

int result = (a + b) is int sum && sum < 100 ? sum : sum - 1;

表达式 sum - 1 有效,并且 sum 仍在范围内,即使它处于 else 条件。为什么?我认为如果 is 表达式 returns 为假,则总和将具有其默认值,对于 int0?

编译器似乎可以证明 a + b 总是一个 int,所以它知道 is int 测试总是 运行,并且会总是通过。因此它知道 sum 总是被赋值,不管在条件的其余部分发生了什么。

尝试使用可能不是 int 的内容,然后发现您收到错误消息:

int a = 3;
int b = 4;
object sumObject = a + b;

// error CS0165: Use of unassigned local variable 'sum'
int result = sumObject is int sum && sum < 100 ? sum : sum - 1;

或者,您可以这样做,这也意味着 sum 可能不会总是被分配:

int a = 3;
int b = 4;

// error CS0165: Use of unassigned local variable 'sum'
int result = false && (a + b) is int sum && sum < 100 ? sum : sum - 1;