Проверьте объект на предмет того, что он НЕ является типом

StackOverflow https://stackoverflow.com/questions/55978

  •  09-06-2019
  •  | 
  •  

Вопрос

Я знаю, как проверить объект, чтобы узнать, принадлежит ли он к определенному типу, используя ключевое слово 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 */}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top