如何检测Type是否支持与no ==运算符相等?

时间:2012-03-04 06:07:11

标签: c# .net

因此Int32没有==运算符,但这是有效的代码

bool y = 6 == 5;

这是因为Int32是原始类型集的一部分。它有效地编译成IL中的CEQ。

所以给定一个Type(带反射)如何确定该类型在没有==运算符时支持CEQ?

1 个答案:

答案 0 :(得分:3)

规范说(§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 ==是一种常规方法,而不是内置运算符。我不确定为什么会在那里列出。