Using the Default Keyword with Generic Types in C#
📖 Scenario: Imagine you are creating a simple program that works with different types of data. Sometimes, you need to set a variable to its default value without knowing its exact type in advance.
🎯 Goal: You will build a small C# program that uses the default keyword with generic types to assign default values to variables of different types.
📋 What You'll Learn
Create a generic method that returns the default value of its type parameter.
Call this method with different types like int, string, and a custom class.
Print the default values to the console.
💡 Why This Matters
🌍 Real World
Using the <code>default</code> keyword with generics helps write flexible code that works with many types without knowing them in advance.
💼 Career
Understanding generics and default values is important for writing reusable and safe code in C# software development.
Progress0 / 4 steps
1
Create a generic method to return default value
Write a generic method called GetDefaultValue with a type parameter T that returns default(T).
C Sharp (C#)
Hint
Use default(T) inside the method to get the default value of the generic type.
2
Call the generic method with different types
Inside the Main method, create three variables: intDefault assigned to GetDefaultValue<int>(), stringDefault assigned to GetDefaultValue<string>(), and customDefault assigned to GetDefaultValue<MyClass>(). Also, define an empty class called MyClass outside Program.
C Sharp (C#)
Hint
Call GetDefaultValue with the type inside angle brackets <> and assign the result to variables.
3
Print the default values to the console
Add Console.WriteLine statements inside Main to print intDefault, stringDefault, and customDefault. Use ?? "null" to show "null" for reference types.
C Sharp (C#)
Hint
Use ?? "null" to print "null" if the value is null.
4
Run the program and see the output
Run the program to see the printed default values for int, string, and MyClass.
C Sharp (C#)
Hint
The default value for int is 0, and for reference types like string and MyClass it is null.
Practice
(1/5)
1. What does the default keyword return when used with a generic type parameter T in C#?
easy
A. A new instance of type T created with the default constructor
B. The default value of type T, like 0 for int or null for reference types
C. An exception is thrown if T is a reference type
D. The string representation of type T
Solution
Step 1: Understand the purpose of default keyword with generic T
The default keyword returns the default value for any type. For value types like int, it returns 0. For reference types, it returns null. When used with a generic type parameter T, default(T) returns the default value of that type without creating an instance.
Final Answer:
The default value of type T, like 0 for int or null for reference types -> Option B
Quick Check:
default(T) = default value [OK]
Hint: Remember: default returns zero/null, not a new object [OK]
Common Mistakes:
Thinking default creates a new instance
Assuming default throws exceptions
Confusing default with ToString()
2. Which of the following is the correct syntax to get the default value of a generic type T inside a method?
easy
A. default(T)
B. default<T>
C. default T
D. default::T
Solution
Step 1: Recall syntax for default and check options
The correct syntax to get the default value of a type is default(TypeName). For generic types, it becomes default(T). default<T> uses invalid angle brackets. default T misses parentheses. default::T uses invalid scope operator. Only default(T) is correct.
Final Answer:
default(T) -> Option A
Quick Check:
Use parentheses with default: default(T) [OK]
Hint: Use parentheses with default keyword for types [OK]
For GetDefault<int>(), default(int) returns 0, so first line prints 0. For GetDefault<string>(), default(string) returns null, so null == null is true, second line prints True.
Final Answer:
0
True -> Option C
Quick Check:
default int = 0, default string = null [OK]
Hint: Value types default to zero; reference types default to null [OK]
Common Mistakes:
Assuming default string returns empty string
Confusing default int with null
Forgetting default returns null for references
4. Identify the error in this generic method using default keyword:
public T GetValue<T>() {
T value = default;
return value;
}
medium
A. Syntax error: default must be used as default(T) in this context
B. Missing return type in method signature
C. Runtime error because default cannot be assigned to generic types
D. No error; code compiles and returns default value
Solution
Step 1: Validate default literal usage in generic context
Since C# 7.1, default can be used as a literal without specifying type when the compiler can infer it from context like T value = default;. The method correctly initializes and returns the default value of T. No error.
Final Answer:
No error; code compiles and returns default value -> Option D
Quick Check:
default literal works with inferred generic type [OK]
Hint: Since C# 7.1, default literal can omit type in generics [OK]
Common Mistakes:
Thinking default must always have parentheses
Assuming runtime error for default assignment
Missing that default literal is valid syntax
5. You want to write a generic method that returns the default value of T but only if T is a value type. Otherwise, it should return null. Which code snippet correctly implements this?
hard
A. public object GetDefaultIfValueType<T>() {
return typeof(T).IsValueType ? default(T) : null;
}
B. public T GetDefaultIfValueType<T>() {
return default(T) ?? null;
}
C. public T? GetDefaultIfValueType<T>() where T : struct {
return default(T);
}
D. public T GetDefaultIfValueType<T>() {
if (default(T) == null) return null;
else return default(T);
}
Solution
Step 1: Evaluate options against requirement for value/reference types
Needs runtime check as constraints can't handle both; return object. C: typeof(T).IsValueType ? default(T) : null works. A restricts to struct; B ?? null invalid for values; D default(T) == null compile error unconstrained.
Final Answer:
public object GetDefaultIfValueType<T>() {
return typeof(T).IsValueType ? default(T) : null;
} -> Option A
Quick Check:
Use typeof(T).IsValueType to decide default or null [OK]
Hint: Use typeof(T).IsValueType to check type at runtime [OK]
Common Mistakes:
Restricting generic type with where struct and missing reference types
Using null-coalescing on value types
Comparing default(T) to null directly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.