只需阅读此运算符的规范,??
因为它采用左侧,如果 null 返回右侧的值。
我的问题是,我可以让它返回 3 个可能的值吗?
像这样的东西:
int? y = null;
int z = 2;
int x = y ?? (z > 1 ? z : 0);
这可能吗?
只需阅读此运算符的规范,??
因为它采用左侧,如果 null 返回右侧的值。
我的问题是,我可以让它返回 3 个可能的值吗?
像这样的东西:
int? y = null;
int z = 2;
int x = y ?? (z > 1 ? z : 0);
这可能吗?
这??
是一个二元运算符,但第二个操作数(右侧)可以是您想要的任何表达式(只要它具有合适的返回类型以与第一个操作数合并)。所以是的,第二个操作数可以是(z > 1 ? z : 0)
. 这并不意味着??
有 3 个可能的返回值。
你的代码是完全合法的。您还可以执行以下操作:
int x = a ?? b ?? c;
绝对 - 您可以??
以与任何其他二元运算符相同的方式使用,这意味着您可以在其左侧和/或右侧拥有任何表达式。
例如,您可以执行以下操作:
int? a = ...
int? b = ...
int? c = ...
int? d = ...
int? res = (condition_1 ? a : b) ?? (condition_2 ? c : d);
该表达式将(condition_1 ? a : b)
首先计算,检查它是否为null
,然后使用非空值作为结果,或者计算右侧,并将其作为结果。
您还可以“链接”空合并运算符??
,如下所示:
int? res =a ?? b ?? c ?? d;
此表达式的评估从左到右进行。
是的,这是可能的。尝试编译并进行一些您应该自己验证的测试。