回答:
他のすべての回答には重要な欠落が含まれています。
is
オペレータはないではないオペランドの実行時の型があるかどうかを確認を正確に指定したタイプ。むしろ、ランタイムタイプが指定されたタイプと互換性があるかどうかを確認します。
class Animal {}
class Tiger : Animal {}
...
object x = new Tiger();
bool b1 = x is Tiger; // true
bool b2 = x is Animal; // true also! Every tiger is an animal.
しかし、リフレクションを使用して型のアイデンティティをチェックすると、互換性ではなく、アイデンティティがチェックされます
bool b5 = x.GetType() == typeof(Tiger); // true
bool b6 = x.GetType() == typeof(Animal); // false! even though x is an animal
or with the type variable
bool b7 = t == typeof(Tiger); // true
bool b8 = t == typeof(Animal); // false! even though x is an
それがあなたの望んでいないことなら、おそらくIsAssignableFromが必要です:
bool b9 = typeof(Tiger).IsAssignableFrom(x.GetType()); // true
bool b10 = typeof(Animal).IsAssignableFrom(x.GetType()); // true! A variable of type Animal may be assigned a Tiger.
or with the type variable
bool b11 = t.IsAssignableFrom(x.GetType()); // true
bool b12 = t.IsAssignableFrom(x.GetType()); // true! A
t
してくださいtypeof(Animal)
。したがって、マークの改良された形式はになりt.IsInstanceOfType(x)
ます。
GetType()
ベース上で定義されているため、すべての単一のフレームワークタイプに存在します。 object
タイプでます。そのため、タイプ自体に関係なく、それを使用して基になるType
だから、あなたがする必要があるのは、
u.GetType() == t
インスタンスのTypeがクラスのTypeと等しいかどうかを確認する必要があります。インスタンスのタイプを取得するには、GetType()
メソッドを使用します。
u.GetType().Equals(t);
または
u.GetType.Equals(typeof(User));
それを行う必要があります。もちろん、必要に応じて「==」を使用して比較を行うこともできます。
u.GetType.Equals(typeof(User));
t
は型を含む変数をすでに持っていますが、そのように投稿しました。
オブジェクトが指定された型変数と互換性があるかどうかを確認するために、
u is t
あなたは書くべきです
typeof(t).IsInstanceOfType(u)
typeof(Animal).IsInstanceOfType(x)
はより短くて簡単ですtypeof(Animal).IsAssignableFrom(x.GetType());
(後者を使用する場合は、Resharperが前者の使用を推奨します)。