gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:55:24 25 4
gpt4 key购买 nike

例子:

int a = 3;
int b = 4;

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

表达式 sum - 1 是有效的,并且 sum 仍在范围内,即使它处于 else 条件。为什么呢?我认为如果 is 表达式返回 false,sum 将具有其默认值,对于 int 来说是 0?

最佳答案

编译器似乎可以证明 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;

关于c# - 为什么允许我们在条件运算符的 else 子句中使用由 "is"表达式定义的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62916823/

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