5

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

我注意到typeof(int).GetInterfaces()列出 IComparable 并typeof(int).GetInterface("IComparable")返回 IComparable 类型,那么为什么“is”不能按我的预期工作?

4

3 回答 3

10

is在一个实例上工作。当您说 时typeof(int) is IComparable,您实际上是在检查类型是否System.Type实现IComparable,而实际上并没有。要使用is,您必须使用一个实例:

bool intIsComparable = 0 is IComparable; // true
于 2011-07-31T15:13:55.130 回答
5

int确实支持但 int的IComparable类型不支持,就是这样,你应该检查变量本身而不是它的Type,所以:

int foo = 5;
foo is IComparable;//the result is true, but of course it will not be true if you check typeof(foo)
于 2011-07-31T15:13:27.333 回答
2

is运算符期望左侧有一个实例:

int i = 1;
if (i is IComparable) ...

编译(带有关于始终为真的警告)。

和“typeof(int) is IComparable返回假”

那是因为您在询问 Type 类(的实例)是否是 IComparable。它不是。

于 2011-07-31T15:13:58.247 回答