Ответ 1
С# не совсем естественный язык;) Используйте этот
if(!(t is TypeA))
{
...
}
Я хочу проверить, не является ли объект определенного типа. Я знаю, как проверить, есть ли что-то определенного типа:
if (t is TypeA)
{
...
}
но
if (t isnt TypeA)
{
...
}
не работает.
С# не совсем естественный язык;) Используйте этот
if(!(t is TypeA))
{
...
}
Если вы хотите не только проверить, вы можете использовать as.
var a = t as TypeA;
if(a!= null)
//use a..
Таким образом, если вы хотите использовать тип после проверки, вы избегаете двойного литья.
Если вы делаете TypeA x = (TypeA)t;
внутри блока if, лучший способ -
TypeA x = t as TypeA
if(x != null)
{
...
}
Это приводит к проверке только одного типа времени, а не дважды.
Обычно я использую проверку нулевого и типа в одной строке:
if (t == null || !(t is TypeA)) {
...
}
Если TypeA является структурой, вам нужно будет обработать его несколько иначе:
if (t == null || t.GetType() != typeof(TypeA)) {
...
}
Расширение методов для спасения!
public static class ObjectExtensions
{
public static bool Isnt(this object source, Type targetType)
{
return source.GetType() != targetType;
}
}
Использование
if (t.Isnt(typeof(TypeA)))
{
...
}
Пример ниже для getType()
:
object obj = new object();
obj.GetType();
string s;
s.GetType();
List<string> StringList = new List<string>();
StringList.GetType();