How to check if an object is not of a particular type?

I want to check if an object is not of a particular type. I know how to check if something is of a particular type:

if (t is TypeA)
{
   ...
}

but

if (t isnt TypeA)
{
   ...
}   

doesn't work.


Solution 1:

UPDATE 2020-10-30:

Times are changing. Starting from C# 9.0 you can use more natural way of checking it:

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

ORIGINAL ANSWER:

C# is not quite natural language ;) Use this one

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

Solution 2:

if you want not only check, you can use as operator.

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

In this way, if you want use a type after check, you avoid double casting..

Solution 3:

If you are doing a TypeA x = (TypeA)t; inside the if block then a better way is

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

This causes only one time type checking rather than twice.

Solution 4:

Extensions methods to the rescue!!

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

Usage

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