我想在排序之前检查一个类型是否支持IComparable,但我发现检查一个类型是否支持使用“is”的IComparable接口并不总能给我正确的答案。例如,typeof(int) is IComparable
返回false,即使int支持IComparable接口。
我注意到typeof(int).GetInterfaces()
列出了IComparable,typeof(int).GetInterface("IComparable")
列出了IComparable类型,那么“为什么”不能像我预期的那样工作呢?
答案 0 :(得分:10)
is
适用于某个实例。当你说typeof(int) is IComparable
时,你真正在检查System.Type
类型是否实现IComparable
,而不是is
。要使用bool intIsComparable = 0 is IComparable; // true
,您必须使用实例:
{{1}}
答案 1 :(得分:5)
int
确实支持IComparable
,但int的类型不支持,也就是说,你应该检查变量本身而不是Type,所以:
int foo = 5;
foo is IComparable;//the result is true, but of course it will not be true if you check typeof(foo)
答案 2 :(得分:2)
is
运算符需要左侧的实例:
int i = 1;
if (i is IComparable) ...
编译(警告总是为真)。
并且“typeof(int) is IComparable
返回false”
这是因为您在询问Type类的(实例)是否为IComparable。它不是。