可能重复:
可空类型和三元运算符.为什么这不起作用?
这是我的代码有效
public decimal? Get()
{
var res = ...
return res.Count() > 0 ? res.First() : (decimal?) null;
}
Run Code Online (Sandbox Code Playgroud)
这个不起作用
public decimal? Get()
{
var res = ...
return res.Count() > 0 ? res.First() : null;
}
Run Code Online (Sandbox Code Playgroud)
给出编译器错误:
错误1无法确定条件表达式的类型,因为'decimal'和'
<null>' 之间没有隐式转换
我想知道为什么?有任何想法吗?
C#语言规范的第7.13节介绍了此行为.
简而言之,三元运算符中两个表达式的类型必须是***,以便编译器确定三元表达式的类型.在这种情况下,考虑的两种类型是
decimalnull的decimal类型是一个值类型,因此null是不可转换到它.该值null没有关联类型.这可以防止编译器确定表达式的类型并导致编译错误.
在第一个例子中,第二个类型是decimal?.之间存在转换decimal,decimal?因此编译器会选择decimal?类型.
| 归档时间: |
|
| 查看次数: |
823 次 |
| 最近记录: |