为什么这个不能编译?
int? number = true ? 5 : null;
无法确定条件表达式的
类型,因为'int‘和
之间没有隐式转换
发布于 2013-08-16 03:46:00
null
没有任何可识别的类型-它只需要一点刺激就能让它快乐起来:
int? number = true ? 5 : (int?)null;
发布于 2020-05-24 21:28:25
在C# 9
中,blog现在允许这样做
键入的
目标??然后呢?
有时有条件的??和?:表达式在分支之间没有明显的共享类型。这样的情况现在失败了,但是如果有一个两个分支都转换成的目标类型,C# 9.0将允许它们:
Person person = student ?? customer; // Shared base type
int? result = b ? 0 : null; // nullable value type
或者你的例子:
// Allowed in C# 9.
int? number = true ? 5 : null;
发布于 2020-01-15 22:43:23
正如其他人所提到的,5是一个int
,null
不能隐式转换为int
。
以下是解决此问题的其他方法:
int? num = true ? 5 : default(int?);
int? num = true ? 5 : new int?();
int? num = true ? 5 : null as int?;
int? num = true ? 5 : (int?)null;
int? num = true ? (int?)5 : null;
int? num = true ? 5 as int? : null;
int? num = true ? new int?(5) : null;
此外,在您看到int?
的任何地方,您也可以使用Nullable<int>
。
https://stackoverflow.com/questions/18260528
复制相似问题