Todas as outras respostas contêm omissões significativas.
O is
operador não verifica se o tipo de tempo de execução do operando é exatamente o tipo fornecido; em vez disso, ele verifica se o tipo de tempo de execução é compatível com o tipo fornecido:
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.
Mas verificar a identidade do tipo com verificações de reflexão de identidade , não de compatibilidade
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
Se não for isso que você deseja, provavelmente deseja 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
typeof(Animal).IsInstanceOfType(x)
é mais curto e mais direto do quetypeof(Animal).IsAssignableFrom(x.GetType());
(e Resharper irá sugerir o uso do primeiro se você usar o último).t
portypeof(Animal)
. Então a forma melhorada de Mark se tornat.IsInstanceOfType(x)
.GetType()
existe em cada tipo de estrutura, porque é definido noobject
tipo base . Portanto, independentemente do tipo em si, você pode usá-lo para retornar o subjacenteType
Então, tudo que você precisa fazer é:
fonte
Você precisa ver se o Type da sua instância é igual ao Type da classe. Para obter o tipo de instância, você usa o
GetType()
método:ou
deve fazer isso. Obviamente, você pode usar '==' para fazer sua comparação, se preferir.
fonte
u.GetType.Equals(typeof(User));
t
que contém o tipo.Para verificar se um objeto é compatível com um determinado tipo de variável, ao invés de escrever
você deveria escrever
fonte