如何使用“is”来测试类型是否支持IComparable?

时间:2011-07-31 15:10:39

标签: c# .net reflection icomparable

我想在排序之前检查一个类型是否支持IComparable,但我发现检查一个类型是否支持使用“is”的IComparable接口并不总能给我正确的答案。例如,typeof(int) is IComparable返回false,即使int支持IComparable接口。

我注意到typeof(int).GetInterfaces()列出了IComparable,typeof(int).GetInterface("IComparable")列出了IComparable类型,那么“为什么”不能像我预期的那样工作呢?

3 个答案:

答案 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。它不是。