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

发布于 2024-11-27 02:36:24 字数 344 浏览 0 评论 0原文

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

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

I want to check if a type supports IComparable before sorting it, but I've found that checking if a type supports the IComparable interface using "is" does not always give me the correct answer. For example, typeof(int) is IComparable returns false, even though int does support the IComparable interface.

I note that typeof(int).GetInterfaces() lists IComparable and typeof(int).GetInterface("IComparable") returns the IComparable type, so why does "is" not work as I expect?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

很酷不放纵 2024-12-04 02:36:24

is 适用于实例。当您说 typeof(int) 是 IComparable 时,那么您真正检查的是类型 System.Type 是否实现了 IComparable,而它并没有实现。要使用 is,您必须使用实例:

bool intIsComparable = 0 is IComparable; // true

is works on an instance. When you say typeof(int) is IComparable, then what you are really checking whether the type System.Type implements IComparable, which it does not. To use is, you must use an instance:

bool intIsComparable = 0 is IComparable; // true
初相遇 2024-12-04 02:36:24

int 确实支持 IComparable 但 int 的类型不支持,就是这样,您应该检查变量本身而不是它的 类型,因此:

int foo = 5;
foo is IComparable;//the result is true, but of course it will not be true if you check typeof(foo)

The int does support IComparable but the type of int doesn't, that is it, you should check the variable itself not its Type, so:

int foo = 5;
foo is IComparable;//the result is true, but of course it will not be true if you check typeof(foo)
舞袖。长 2024-12-04 02:36:24

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

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

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

并且“ typeof(int) is IComparable returns false”

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

The is operator expects an instance on the left side:

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

Compiles (with a Warning about always being true).

And " typeof(int) is IComparable returns false"

That is because you are asking whether (an instance of) the Type class is IComparable. It is not.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文