我正在查阅这个运算符??
的规格,它会取左侧的值,如果为空,则返回右侧的值。
我的问题是,我能否让它返回三个可能的值呢?
类似这样:
int? y = null;
int z = 2;
int x = y ?? (z > 1 ? z : 0);
这是可能的吗?
我正在查阅这个运算符??
的规格,它会取左侧的值,如果为空,则返回右侧的值。
我的问题是,我能否让它返回三个可能的值呢?
类似这样:
int? y = null;
int z = 2;
int x = y ?? (z > 1 ? z : 0);
您的代码已经很合法。您还可以尝试这样写:
int x = a ?? b ?? c;
a
和/或b
不可为空,这将无法工作,对吗? - Solomon Closson??
,这意味着你可以在其左侧和/或右侧放置任何表达式。int? a = ...
int? b = ...
int? c = ...
int? d = ...
int? res = (condition_1 ? a : b) ?? (condition_2 ? c : d);
这个表达式将首先计算(condition_1 ? a : b)
,检查它是否为null
,然后使用非空值作为结果,或者计算右侧并将其用作结果。
您还可以像这样“链接”null coalesce运算符??
:
int? res =a ?? b ?? c ?? d;
int
的末尾加上问号才能使其以这种方式工作吗? - Solomon Closson??
表达式要求其左侧为可空类型,因此在我上面的示例中,a
、b
和 c
必须是 int?
;d
可以是 int?
或 int
。链式表达式从左到右进行评估 - 首先是 a??b
,然后是 (a??b)??c
,最后是 ((a??b)??c)??d
。 - Sergey KalinichenkoDictionary<string, string>
进行操作,以便在找不到键时放入默认值,应该怎么做呢?是这样做吗:Dictionary<string?, string> myDictionary = new Dictionary<string?, string>();
然后我能这样做吗:string theKey = myDictionary["keyNotinDictionary"] ?? "Not Found";
? - Solomon ClossonDictionary<K,V>
是引用类型,即它已经是可空的,所以您不需要使用??
。其次,当键不存在且您调用dict[...]
时,Dictionary
会抛出异常。不幸的是,您不能在一行中完成它 - 最好的方法是两行:string res; string theValue = myDictionary.TryGetValue("keyNotinDictionary", out res) ? res : "Not Found";
- Sergey Kalinichenko??
是一个二元运算符,但第二个操作数(右侧)可以是任何你想要的表达式(只要它具有合适的返回类型与第一个操作数合并)。因此,是的,第二个操作数可以是(z > 1 ? z : 0)
。这并不意味着??
有3个可能的返回值。是的,这是可能的。 尝试编译并进行一些测试,您应该自行验证。