如何检测类型是否支持没有==运算符的条件?
问题描述:
那么的Int32没有一个==操作符,但这是有效的代码如何检测类型是否支持没有==运算符的条件?
bool y = 6 == 5;
这是因为的Int32是原始类型集合的一部分。它有效地编译为IL中的CEQ。
因此给定一个Type(带反射)如何确定该类型在没有==运算符时支持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 ==
是通常的方法,没有一个内置在运营商。我不知道它为什么在那里列出。
为什么?你想做什么? – SLaks 2012-03-04 06:10:18
IL编织。我想比较两个相同类型的实例。 – Simon 2012-03-04 06:12:17
请注意,CEQ也支持参考类型。 – SLaks 2012-03-04 06:16:50