如何检测类型是否支持没有==运算符的条件?

如何检测类型是否支持没有==运算符的条件?

问题描述:

那么的Int32没有一个==操作符,但这是有效的代码如何检测类型是否支持没有==运算符的条件?

bool y = 6 == 5; 

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

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

+1

为什么?你想做什么? – SLaks 2012-03-04 06:10:18

+0

IL编织。我想比较两个相同类型的实例。 – Simon 2012-03-04 06:12:17

+1

请注意,CEQ也支持参考类型。 – SLaks 2012-03-04 06:16:50

的规范说(§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 ==是通常的方法,没有一个内置在运营商。我不知道它为什么在那里列出。

+0

所以基于此,我可以硬编码列表。 – Simon 2012-03-04 06:31:08

+1

是的;肯定。 – SLaks 2012-03-04 06:37:05