default(Foo)will return null if Foo- the type of the class, zero, where Foo- the type of value (for example, int), and an instance Foowith all the fields initialized by their respective default()where Foois the structure. It was added to the language so that generics could support both values ββand reference types - more information on MSDN
Use default(Foo)when you are testing T in the context of SomeClass<T>or MyMethod<T>, and you do not know if T will be a value type, class type, or structure.
null "", " , ". Foo.Empty, , ; String.Empty "", .
null, , (), , .