5

ソートする前に、型がIComparableをサポートしているかどうかを確認したいのですが、「is」を使用して型がIComparableインターフェイスをサポートしているかどうかを確認しても、必ずしも正しい答えが得られるとは限りません。たとえば、typeof(int) is IComparableintがIComparableインターフェイスをサポートしている場合でも、falseを返します。

typeof(int).GetInterfaces()IComparableをリストし、IComparableタイプを返すことに注意します。それではtypeof(int).GetInterface("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サポートし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)
于 2011-07-31T15:13:27.333 に答える
2

isオペレーターは左側にインスタンスがあることを期待しています。

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

コンパイルします(常に真であるという警告付き)。

そして「typeof(int) is IComparablefalseを返す」

これは、Typeクラス(のインスタンス)がIComparableであるかどうかを尋ねているためです。そうではない。

于 2011-07-31T15:13:58.247 に答える