Как проверить, не является ли объект определенного типа? Я хочу проверить, не является ли объект определенного типа. Я знаю, как проверить, есть ли что-то определенного типа: if (t is TypeA) { ... } но if (t isnt TypeA) { ... } не работает. Ответ 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();
Ответ 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();