带有3个可能返回值的C#合并运算符
本文关键字:合并 运算符 返回值 3个 带有 | 更新日期: 2023-09-27 17:58:36
只需阅读此运算符??
的规范,因为它位于左侧,如果为null,则返回右侧的值。
我的问题是,我可以让它返回3个可能的值吗?
类似这样的东西:
int? y = null;
int z = 2;
int x = y ?? (z > 1 ? z : 0);
这可能吗?
绝对-您可以像使用任何其他二进制运算符一样使用??
,这意味着您可以在其左侧和/或右侧使用任何表达式。
例如,你可以这样做:
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;
是的,这是可能的。试着编译并进行一些你应该自己验证的测试。