Every reference and value type has a default value. This value is returned by the default(Type) expression. Default is most useful for writing generic classes.
In a generic method, sometimes we need to return a value that is not yet initialized—we can use default()
for this.
We look at 4 uses of the default operator. The 4 types we apply the default expression to are the StringBuilder
, int
, bool
and Program
types.
null
value is printed as a blank line.using System; using System.Text; class Program { static void Main() { // Acquire the default values for these types and assign to a variable. StringBuilder variable1 = default(StringBuilder); int variable2 = default(int); bool variable3 = default(bool); Program variable4 = default(Program); // Write the values. Console.WriteLine(variable1); // Null Console.WriteLine(variable2); // 0 Console.WriteLine(variable3); // False Console.WriteLine(variable4); // Null } } (Blank) 0 False (Blank)
class
Here we have the generic class
Test, which requires a class
parameter with a public parameterless constructor.
using System; using System.Text; class Test<T> where T : class, new() { int _size; public T GetOrDefault() { // Use default in a generic class method. return _size == 0 ? default(T) : new T(); } } class Program { static void Main() { Test<StringBuilder> test = new Test<StringBuilder>(); Console.WriteLine(test.GetOrDefault() == null); } }True
The default value expression is implemented using static
analysis. This means the default expressions are evaluated at compile-time, resulting in no performance loss.
typeof
expressions, caching the default expression would have no benefit.We looked at the default value expression. By understanding the usage of the default value expression, we can better understand the type system.