gpt4 book ai didi

c# - 奇怪的运算符优先级是 ?? (空合并运算符)

转载 作者:IT王子 更新时间:2023-10-29 04:30:09 32 4
gpt4 key购买 nike

最近我遇到了一个奇怪的错误,我将一个字符串与 int? 连接起来,然后在之后添加另一个字符串。

我的代码基本上是这样的:

int? x=10;
string s = "foo" + x ?? 0 + "bar";

令人惊讶的是,这将在没有警告或不兼容类型错误的情况下运行和编译,如下所示:

int? x=10;
string s = "foo" + x ?? "0" + "bar";

然后这会导致意外的类型不兼容错误:

int? x=10;
string s = "foo" + x ?? 0 + 12;

这个更简单的例子也是如此:

int? x=10;
string s = "foo" + x ?? 0;

有人可以向我解释一下这是如何工作的吗?

最佳答案

空合并运算符的 precedence 非常低所以你的代码被解释为:

int? x = 10;
string s = ("foo" + x) ?? (0 + "bar");

在此示例中,两个表达式都是字符串,因此它可以编译,但不会执行您想要的操作。在您的下一个示例中,?? 运算符的左侧是一个字符串,但右侧是一个整数,因此它无法编译:

int? x = 10;
string s = ("foo" + x) ?? (0 + 12);
// Error: Operator '??' cannot be applied to operands of type 'string' and 'int'

解决办法当然是加上括号:

int? x = 10;
string s = "foo" + (x ?? 0) + "bar";

关于c# - 奇怪的运算符优先级是 ?? (空合并运算符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3259352/

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