如何检测类型是否支持不带==运算符的等式

本文关键字:运算符 支持 是否 何检测 检测 类型 | 更新日期: 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 ==是一个普通方法,而不是内置运算符。我不知道为什么它会被列在那里。