下面的C#代码:
int? i;
i = (true ? null : 0);
Run Code Online (Sandbox Code Playgroud)
给我错误:
无法确定条件表达式的类型,因为'<null>'和'int'之间没有隐式转换
这不应该有效吗?我在这里失踪了什么?
Luk*_*keH 95
编译器尝试评估右手表达式.null是null和0是int文字,不是int?.编译器试图告诉您它无法确定表达式应该评估的类型.null和之间没有隐式转换int,因此错误消息.
您需要告诉编译器表达式应该评估为int?.有之间的隐式转换int?和int之间,或者null和int?,因此无论这些应该工作:
int? x = true ? (int?)null : 0;
int? y = true ? null : (int?)0;
Run Code Online (Sandbox Code Playgroud)
cod*_*ife 17
在处理三元运算符时,您需要使用default()关键字而不是null.
例:
int? i = (true ? default(int?) : 0);
Run Code Online (Sandbox Code Playgroud)
或者,你可以抛出null:
int? i = (true ? (int?)null : 0);
Run Code Online (Sandbox Code Playgroud)
我个人坚持使用default()符号,这只是一种偏好,真的.但你应该最终坚持一个特定的符号,恕我直言.
HTH!
| 归档时间: |
|
| 查看次数: |
23421 次 |
| 最近记录: |