📖 Scenario: Imagine you run a small shop and want to keep track of different types of items you sell, like books and toys. You want a way to store these items safely without mixing them up or losing their specific details.
🎯 Goal: You will build a simple program that shows why generics are useful in C#. You will first create separate lists for books and toys, then see how generics help you avoid repeating code and keep your data safe.
📋 What You'll Learn
Create two separate lists: one for string book titles and one for string toy names.
Create a generic list that can hold any type of item.
Add items to the generic list and show how it works for both books and toys.
Print the contents of each list to see the difference.
💡 Why This Matters
🌍 Real World
Generics are used in many programs to create reusable and safe code that works with different data types, like lists of customers, products, or messages.
💼 Career
Understanding generics is important for software developers to write clean, efficient, and error-free code that can handle many data types without duplication.
Progress0 / 4 steps
1
Create separate lists for books and toys
Create a List<string> called bookTitles with these exact values: "C# Basics" and "Learn LINQ". Also create a List<string> called toyNames with these exact values: "Teddy Bear" and "Lego Set".
C Sharp (C#)
Hint
Use List<string> and initialize with the exact values inside curly braces.
2
Create a generic list for any item type
Create a generic List<T> called items that can hold any type. For now, create a List<string> called items and leave it empty.
C Sharp (C#)
Hint
Use List<string> to create the items list.
3
Add books and toys to the generic list
Add the first book title from bookTitles to items. Then add the first toy name from toyNames to items. Use items.Add() for both.
C Sharp (C#)
Hint
Use items.Add(bookTitles[0]) and items.Add(toyNames[0]) to add items.
4
Print all lists to see the difference
Print the contents of bookTitles, toyNames, and items using Console.WriteLine inside a foreach loop. Print each list's name before its items.
C Sharp (C#)
Hint
Use foreach loops to print each list's items with Console.WriteLine.
Practice
(1/5)
1. Why are generics useful in C# programming?
easy
A. They automatically fix bugs in the code.
B. They make the program run faster by using less memory.
C. They replace the need for classes and methods.
D. They allow writing code that works with any data type without duplication.
Solution
Step 1: Understand the purpose of generics
Generics let you write one version of code that works with many data types, avoiding repeated code.
Step 2: Compare other options
The other options describe incorrect benefits or misunderstand generics' role.
Final Answer:
They allow writing code that works with any data type without duplication. -> Option D
Quick Check:
Generics = Flexible code reuse [OK]
Hint: Generics = one code, many types [OK]
Common Mistakes:
Thinking generics improve speed directly
Believing generics fix bugs automatically
Confusing generics with replacing classes
2. Which of the following is the correct syntax to declare a generic class in C#?
easy
A. class MyClass<T> { }
B. class MyClass[] { }
C. class MyClass<T>[] { }
D. class MyClass<T> () { }
Solution
Step 1: Recall generic class syntax
In C#, generic classes use angle brackets with a type parameter, like class MyClass<T> { }.
Step 2: Check other options
The other options use invalid syntax: arrays or parentheses are incorrect here.
Final Answer:
class MyClass<T> { } -> Option A
Quick Check:
Generic class syntax uses <T> [OK]
Hint: Generic classes use angle brackets <T> [OK]
Common Mistakes:
Using square brackets instead of angle brackets
Adding parentheses after class name
Combining array syntax with generics incorrectly
3. What will be the output of this C# code?
List<int> numbers = new List<int>();
numbers.Add(5);
numbers.Add(10);
Console.WriteLine(numbers[1]);
medium
A. 0
B. 5
C. 10
D. Compilation error
Solution
Step 1: Understand list indexing
The list numbers has two elements: 5 at index 0 and 10 at index 1.
Step 2: Identify the printed element
numbers[1] accesses the second element, which is 10.
Final Answer:
10 -> Option C
Quick Check:
Index 1 in list = 10 [OK]
Hint: List index starts at 0, so index 1 is second item [OK]
Common Mistakes:
Confusing index 0 and 1
Expecting compilation error due to generics
Thinking default value 0 is printed
4. Identify the error in this generic method declaration:
public T GetItem<T>(T item) {
return item;
}
medium
A. Missing return type before method name
B. No error, the method is correct
C. Generic type parameter should be after method name
D. Generic type parameter should be declared in class, not method
Solution
Step 1: Review generic method syntax
The method declares a generic type parameter T correctly after the method name and returns the item.
Step 2: Check other options
The other options misunderstand generic method syntax; the code is valid.
Final Answer:
No error, the method is correct -> Option B
Quick Check:
Generic method syntax is correct [OK]
Hint: Generic methods declare <T> after method name [OK]
Common Mistakes:
Thinking generic type must be declared at class level only
Confusing method return type with generic parameter
Missing angle brackets around T
5. You want to create a generic method that returns the default value of any type. Which code correctly implements this in C#?
hard
A. public T GetDefault<T>() { return default(T); }
B. public T GetDefault<T>() { return null; }
C. public T GetDefault() { return default; }
D. public T GetDefault<T>() { return new T(); }
Solution
Step 1: Understand how to return default value for generic type
In C#, default(T) returns the default value for any type T, including value types and reference types.
Step 2: Analyze each option
public T GetDefault<T>() { return default(T); } uses default(T) correctly. public T GetDefault<T>() { return null; } returns null which fails for value types. public T GetDefault() { return default; } lacks generic parameter <T>. public T GetDefault<T>() { return new T(); } tries to create new instance but fails for types without parameterless constructor.
Final Answer:
public T GetDefault<T>() { return default(T); } -> Option A
Quick Check:
Use default(T) for generic default value [OK]
Hint: Use default(T) to get default generic value [OK]
Common Mistakes:
Returning null for value types
Omitting generic type parameter
Assuming new T() always works
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.