其中是可空值和定义值(相等,大于等)之间的操作符

本文关键字:大于 之间 操作符 相等 空值 定义 | 更新日期: 2023-09-27 17:51:24

如果我有以下代码(我在Linqpad中运行):

decimal? x = null;
(x < 1).Dump();

在可空的小数和小数之间定义的LessThan操作符在哪里?

不是十进制的吗?它不在十进制类中

我基本上想创建调用操作符的linq表达式。

或者这段代码是由编译器在飞行中创建的,即它使用默认的十进制运算符,然后添加一些额外的语句来检查可空值是否实际上有值?

其中是可空值和定义值(相等,大于等)之间的操作符

这是一个所谓的提升运算符,即在非空类型上定义的运算符,编译器将其应用于相同类型的可空形式。

对于关系运算符

  <  >  <=  >=

如果操作数类型均为非空值类型,且结果类型为bool,则存在操作符的提升形式。提升后的形式是通过向每个操作数类型添加单个?修饰符来构造的。如果一个或两个操作数为null,则提升运算符的值为false。否则,提升的操作符展开操作数,并应用底层操作符产生bool结果。

实现的细节见c#语言规范第N.3.7节。