Respostas:
Todas as outras respostas contêm omissões significativas.
O isoperador 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
tpor typeof(Animal). Então a forma melhorada de Mark se torna t.IsInstanceOfType(x).
GetType()existe em cada tipo de estrutura, porque é definido no objecttipo base . Portanto, independentemente do tipo em si, você pode usá-lo para retornar o subjacenteType
Então, tudo que você precisa fazer é:
u.GetType() == t
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:
u.GetType().Equals(t);
ou
u.GetType.Equals(typeof(User));
deve fazer isso. Obviamente, você pode usar '==' para fazer sua comparação, se preferir.
u.GetType.Equals(typeof(User));
tque contém o tipo.
Para verificar se um objeto é compatível com um determinado tipo de variável, ao invés de escrever
u is t
você deveria escrever
typeof(t).IsInstanceOfType(u)
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).