In C#, null means "no object." You cannot use 0 instead of null in your programs even though null is represented by the value 0. You can use null with any reference type including arrays, strings, and custom types. In C#, null is not the same as the constant zero.
The difference between “is not null” and “!= null” is that the compiler guarantees that no user-overloaded operator is called when using “is not null” instead of “!= null” (or “is null” instead of “== null”).
The null-forgiving operator (!) is used to inform the compiler that passing null is expected and shouldn’t be warned about. You can also use the null-forgiving operator when you definitely know that an expression can’t be null but the compiler doesn’t manage to recognize that.