Blu*_*eft 21 .net c# null casting
以下代码无法编译:
//int a = ...
int? b = (int?) (a != 0 ? a : null);
Run Code Online (Sandbox Code Playgroud)
为了编译,需要将其更改为
int? b = (a != 0 ? a : (int?) null);
Run Code Online (Sandbox Code Playgroud)
由于这两个b = null和b = a是合法的,这是没有意义的我.
为什么我们不得不强制null转换为一个int?为什么我们不能简单地为整个表达式提供一个显式类型转换(我知道在其他情况下可能)?
Han*_*ant 18
从C#语言规范的第7.13章开始:
?:运算符的第二个和第三个操作数控制条件表达式的类型.设X和Y是第二个和第三个操作数的类型.然后,
- 如果X和Y是相同的类型,那么这是条件表达式的类型.
- 否则,如果从X到Y存在隐式转换(第6.1节),而不是从Y到X,则Y是条件表达式的类型.
- 否则,如果从Y到X存在隐式转换(第6.1节),而不是从X到Y,则X是条件表达式的类型.
- 否则,无法确定表达式类型,并发生编译时错误.
在您的情况下,没有从int到null的隐式转换,反之亦然.你的演员解决了这个问题,int可以转换为int吗?
如果您使用default(int?)而不是,您可以避免投射null.
int a = 42;
int? b = (a != 0 ? a : default(int?));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2599 次 |
| 最近记录: |