User u = new User();
Type t = typeof(User);
u is User -> returns true
u is t -> compilation error
この方法で変数のタイプをテストするにはどうすればよいですか?
他の回答にはすべて重要な省略が含まれています。
is
演算子はnotオペランドの実行時の型が正確に指定された型であるかどうかを確認します。むしろ、ランタイムタイプ互換性がある指定されたタイプかどうかを確認します。
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.
ただし、タイプidentityのチェックでは、compatibilityではなくidentityのリフレクションチェックを使用します。
bool b3 = x.GetType() == typeof(Tiger); // true
bool b4 = x.GetType() == typeof(Animal); // false! even though x is an animal
それが望んでいない場合は、おそらくIsAssignableFromが必要です。
bool b5 = typeof(Tiger).IsAssignableFrom(x.GetType()); // true
bool b6 = typeof(Animal).IsAssignableFrom(x.GetType()); // true! A variable of type Animal may be assigned a Tiger.
GetType()
は、ベースobject
タイプで定義されているため、すべてのフレームワークタイプに存在します。したがって、型自体に関係なく、基になるType
を返すためにそれを使用できます
だから、あなたがする必要があるのは:
u.GetType() == t
インスタンスのタイプがクラスのタイプと等しいかどうかを確認する必要があります。インスタンスのタイプを取得するには、 GetType()
メソッドを使用します。
u.GetType().Equals(t);
または
u.GetType.Equals(typeof(User));
それを行う必要があります。必要に応じて、 '=='を使用して比較を行うことができます。
書く代わりに、オブジェクトが与えられた型変数と互換性があるかどうかをチェックするため
u is t
あなたは書くべきです
typeof(t).IsInstanceOfType(u)