C# 中的高级特性:可空类型、扩展方法、匿名类型、元组与记录
1. 可空类型操作符提升
可空类型 Nullable<T> 本身未定义 < 、 > 或 == 等操作符,但以下代码仍能正确编译和执行:
int? x = 5;
int? y = 10;
bool b = x < y; // true
这是因为编译器从基础值类型“借用”或“提升”了小于操作符。语义上,上述比较表达式会被转换为:
bool b = (x.HasValue && y.HasValue)
? (x.Value < y.Value)
: false;
即如果 x 和 y 都有值,则使用 int 的小于操作符进行比较;否则返回 false 。
操作符提升意味着可以在 T? 上隐式使用 T 的操作符。虽然可以为 T? 定义操作符以提供特殊的空值行为,但大多数情况下,依靠编译器自动应用系统的可空逻辑更好。
编译器根据操作符的类别执行不同的空值逻辑:
超级会员免费看
订阅专栏 解锁全文
26

被折叠的 条评论
为什么被折叠?



