Проверьте объект на предмет того, что он НЕ является типом
Вопрос
Я знаю, как проверить объект, чтобы узнать, принадлежит ли он к определенному типу, используя ключевое слово IS, например.
if (foo is bar)
{
//do something here
}
но как проверить, что это не «бар»? Кажется, я не могу найти ключевое слово, которое работает с IS для проверки отрицательного результата.
Кстати, у меня ужасное ощущение, что это так очевидно, так что заранее извиняюсь...
Решение
if (!(foo is bar)) {
}
Другие советы
Вы также можете использовать как оператор.
Оператор AS используется для выполнения конверсии между совместимыми типами.
bar aBar = foo as bar; // aBar is null if foo is not bar
Нет конкретного ключевого слова
if (!(foo is bar)) ...
if (foo.GetType() != bar.GetType()) .. // foo & bar should be on the same level of type hierarchy
Вам следует уточнить, хотите ли вы проверить, является ли объект точно определенный тип или назначаемый из определенного типа.Например:
public class Foo : Bar {}
И предположим, что у вас есть:
Foo foo = new Foo();
Если вы хотите знать, не является ли foo Bar(), вы должны сделать следующее:
if(!(foo.GetType() == tyepof(Bar))) {...}
Но если вы хотите убедиться, что foo не является производным от Bar, то можно легко проверить это с помощью ключевого слова as.
Bar bar = foo as Bar;
if(bar == null) {/* foo is not a bar */}