如何检测类型是否支持不带==运算符的等式
本文关键字:运算符 支持 是否 何检测 检测 类型 | 更新日期: 2023-09-27 18:26:50
因此Int32没有==运算符,但这是有效的代码
bool y = 6 == 5;
这是因为Int32是基本类型集的一部分。它在IL中有效地编译为CEQ。
那么,给定一个类型(带反射),当它没有==运算符时,如何确定该类型支持CEQ?
规范规定(§7.10):
预定义的整数比较运算符为:
bool operator ==(int x, int y); bool operator ==(uint x, uint y); bool operator ==(long x, long y); bool operator ==(ulong x, ulong y);
预定义的浮点比较运算符有:
bool operator ==(float x, float y); bool operator ==(double x, double y);
预定义的十进制比较运算符为:
bool operator ==(decimal x, decimal y); bool operator !=(decimal x, decimal y);
预定义的布尔等式运算符为:
bool operator ==(bool x, bool y); bool operator !=(bool x, bool y);
每个枚举类型都隐式地提供以下预定义的比较运算符:
bool operator ==(E x, E y); bool operator !=(E x, E y);
请注意,decimal.operator ==
是一个普通方法,而不是内置运算符。我不知道为什么它会被列在那里。