C#/ .NET 3.5中的强制转换如何适用于带有'?'的类型

Ine*_*nez 1 c# linq

可能重复:
可空类型和三元运算符.为什么这不起作用?

这是我的代码有效

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>' 之间没有隐式转换

我想知道为什么?有任何想法吗?

Jar*_*Par 7

C#语言规范的第7.13节介绍了此行为.

简而言之,三元运算符中两个表达式的类型必须是***,以便编译器确定三元表达式的类型.在这种情况下,考虑的两种类型是

  1. decimal
  2. null

decimal类型是一个值类型,因此null是不可转换到它.该值null没有关联类型.这可以防止编译器确定表达式的类型并导致编译错误.

在第一个例子中,第二个类型是decimal?.之间存在转换decimal,decimal?因此编译器会选择decimal?类型.


归档时间:

查看次数:

823 次

最近记录:

15 年,5 月 前