带有3个可能返回值的C#合并运算符

本文关键字:合并 运算符 返回值 3个 带有 | 更新日期: 2023-09-27 17:58:36

只需阅读此运算符??的规范,因为它位于左侧,如果为null,则返回右侧的值。

我的问题是,我可以让它返回3个可能的值吗?

类似这样的东西:

int? y = null;
int z = 2;
int x = y ?? (z > 1 ? z : 0);

这可能吗?

带有3个可能返回值的C#合并运算符

绝对-您可以像使用任何其他二进制运算符一样使用??,这意味着您可以在其左侧和/或右侧使用任何表达式。

例如,你可以这样做:

int? a = ...
int? b = ...
int? c = ...
int? d = ...
int? res = (condition_1 ? a : b) ?? (condition_2 ? c : d);

这个表达式将首先计算(condition_1 ? a : b),检查它是否为null,然后使用非null值作为结果,或者计算右侧,然后将其作为结果。

您还可以"链接"空合并运算符??,如下所示:

int? res =a ?? b ?? c ?? d;

此表达式的求值从左到右。

??是一个二进制运算符,但第二个操作数(右手边)可以是您想要的任何表达式(只要它有一个合适的返回类型,可以与第一个操作数合并)。所以是的,第二个操作数可以是(z > 1 ? z : 0)。这并不意味着??有3个可能的返回值。

您的代码是完全合法的。您还可以执行以下操作:

int x = a ?? b ?? c;

是的,这是可能的。试着编译并进行一些你应该自己验证的测试。