Подтвердить что ты не робот

Как проверить, не является ли объект определенного типа?

Я хочу проверить, не является ли объект определенного типа. Я знаю, как проверить, есть ли что-то определенного типа:

if (t is TypeA)
{
   ...
}

но

if (t isnt TypeA)
{
   ...
}   

не работает.

4b9b3361

Ответ 1

С# не совсем естественный язык;) Используйте этот

if(!(t is TypeA))
{
   ...
}

Ответ 2

Если вы хотите не только проверить, вы можете использовать as.

var a = t as TypeA;
if(a!= null)
   //use a.. 

Таким образом, если вы хотите использовать тип после проверки, вы избегаете двойного литья.

Ответ 3

Если вы делаете TypeA x = (TypeA)t; внутри блока if, лучший способ -

TypeA x = t as TypeA
if(x != null)
{
...
}

Это приводит к проверке только одного типа времени, а не дважды.

Ответ 4

Обычно я использую проверку нулевого и типа в одной строке:

if (t == null || !(t is TypeA)) {
  ...
}

Если TypeA является структурой, вам нужно будет обработать его несколько иначе:

if (t == null || t.GetType() != typeof(TypeA)) {
  ...
}

Ответ 5

Расширение методов для спасения!

public static class ObjectExtensions
{
    public static bool Isnt(this object source, Type targetType)
    {
        return source.GetType() != targetType;
    }
}

Использование

if (t.Isnt(typeof(TypeA)))
{
   ...
}

Ответ 6

Пример ниже для getType():

object obj = new object();
obj.GetType();

string s;
s.GetType();

List<string> StringList = new List<string>();
StringList.GetType();