如果我有这个代码(我在Linqpad中运行它):
decimal? x = null;
(x < 1).Dump();
Run Code Online (Sandbox Code Playgroud)
在可空的十进制和十进制之间定义了LessThan运算符?
它不是十进制的?它不在十进制类中.
我基本上想要创建调用运算符的linq表达式.
或者这个代码是由编译器在运行时创建的,即它使用默认的十进制运算符然后添加一些额外的语句来检查可空值是否实际具有值?
这是一个所谓的提升运算符,即在非可空类型上定义的运算符,编译器应用于相同类型的可空形式.
对于关系运算符
Run Code Online (Sandbox Code Playgroud)< > <= >=如果操作数类型都是非可空值类型且结果类型是,则存在提升形式的运算符
bool.通过向?每个操作数类型添加单个修饰符来构造提升形式.false如果一个或两个操作数都是,则提升的运算符产生值null.否则,提升的运算符会解包操作数并应用基础运算符来生成bool结果.
实现的细节在C#语言规范的N.3.7节中.