Teste de um objeto por NÃO ser um tipo de
Pergunta
Eu sei como testar um objeto para ver se ele é de um tipo, usando a palavra-chave É e.g.
if (foo is bar)
{
//do something here
}
mas como você o teste para ele não ser "bar"?, Eu não consigo encontrar uma palavra-chave que trabalha É para testar se um resultado negativo.
BTW - eu tenho uma horrível sensação de que esta é soooo óbvio, portanto, desculpas antecipadamente...
Solução
if (!(foo is bar)) {
}
Outras dicas
Você também pode usar o como operador de.
O operador é usado para executar conversões entre tipos compatíveis.
bar aBar = foo as bar; // aBar is null if foo is not bar
Não há nenhuma palavra-chave específica,
if (!(foo is bar)) ...
if (foo.GetType() != bar.GetType()) .. // foo & bar should be on the same level of type hierarchy
Você deverá esclarecer se pretende testar se um objeto é exatamente um determinado tipo ou atribuível a partir de um determinado tipo.Por exemplo:
public class Foo : Bar {}
E suponha que você tenha:
Foo foo = new Foo();
Se você quer saber se o foo não é Bar(), em seguida, você poderia fazer isso:
if(!(foo.GetType() == tyepof(Bar))) {...}
Mas se você deseja certificar-se de que o foo não deriva da Barra, em seguida, verificar facilmente é usar a palavra-chave.
Bar bar = foo as Bar;
if(bar == null) {/* foo is not a bar */}