In C#, collections are used to store, manage, and manipulate groups of related objects. Collections provide a more flexible way to work with groups of objects compared to arrays. This module will cover the different types of collections available in C#, their usage, and practical examples.
Key Concepts
-
Types of Collections:
- ArrayList
- List
- Dictionary<TKey, TValue>
- Queue
- Stack
- HashSet
-
Generic vs Non-Generic Collections:
- Generic collections provide type safety and better performance.
- Non-generic collections can store any type of object but lack type safety.
-
Common Operations:
- Adding elements
- Removing elements
- Accessing elements
- Iterating through collections
Types of Collections
ArrayList
The ArrayList class is a non-generic collection that can store any type of object.
using System;
using System.Collections;
class Program
{
static void Main()
{
ArrayList arrayList = new ArrayList();
arrayList.Add(1);
arrayList.Add("Hello");
arrayList.Add(3.14);
foreach (var item in arrayList)
{
Console.WriteLine(item);
}
}
}List
The List<T> class is a generic collection that provides type safety and better performance.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<int> intList = new List<int>();
intList.Add(1);
intList.Add(2);
intList.Add(3);
foreach (int item in intList)
{
Console.WriteLine(item);
}
}
}Dictionary<TKey, TValue>
The Dictionary<TKey, TValue> class is a generic collection that stores key-value pairs.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
Dictionary<string, int> dictionary = new Dictionary<string, int>();
dictionary["one"] = 1;
dictionary["two"] = 2;
dictionary["three"] = 3;
foreach (var kvp in dictionary)
{
Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
}
}
}Queue
The Queue<T> class represents a first-in, first-out (FIFO) collection of objects.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
Queue<string> queue = new Queue<string>();
queue.Enqueue("First");
queue.Enqueue("Second");
queue.Enqueue("Third");
while (queue.Count > 0)
{
Console.WriteLine(queue.Dequeue());
}
}
}Stack
The Stack<T> class represents a last-in, first-out (LIFO) collection of objects.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
Stack<string> stack = new Stack<string>();
stack.Push("First");
stack.Push("Second");
stack.Push("Third");
while (stack.Count > 0)
{
Console.WriteLine(stack.Pop());
}
}
}HashSet
The HashSet<T> class provides high-performance set operations.
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
HashSet<int> hashSet = new HashSet<int>();
hashSet.Add(1);
hashSet.Add(2);
hashSet.Add(3);
hashSet.Add(1); // Duplicate, will not be added
foreach (int item in hashSet)
{
Console.WriteLine(item);
}
}
}Practical Exercises
Exercise 1: Working with List
Task: Create a List<string> to store names. Add five names to the list, remove one, and then print all the names.
Solution:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<string> names = new List<string> { "Alice", "Bob", "Charlie", "David", "Eve" };
names.Remove("Charlie");
foreach (string name in names)
{
Console.WriteLine(name);
}
}
}Exercise 2: Using Dictionary<TKey, TValue>
Task: Create a Dictionary<string, int> to store the names and ages of five people. Print each name and age.
Solution:
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
Dictionary<string, int> people = new Dictionary<string, int>
{
{ "Alice", 30 },
{ "Bob", 25 },
{ "Charlie", 35 },
{ "David", 40 },
{ "Eve", 28 }
};
foreach (var person in people)
{
Console.WriteLine($"Name: {person.Key}, Age: {person.Value}");
}
}
}Common Mistakes and Tips
- Type Safety: Always prefer generic collections (
List<T>,Dictionary<TKey, TValue>, etc.) over non-generic collections (ArrayList,Hashtable) for type safety and performance. - Null Values: Be cautious when adding or accessing elements in collections that can store null values.
- Iteration: Use
foreachloops for iterating through collections to avoid index-related errors.
Conclusion
In this section, we explored various types of collections in C#, including ArrayList, List<T>, Dictionary<TKey, TValue>, Queue<T>, Stack<T>, and HashSet<T>. We discussed their usage, provided practical examples, and highlighted common operations. Understanding collections is crucial for efficient data management and manipulation in C#. In the next module, we will delve into LINQ (Language Integrated Query) to further enhance our data handling capabilities.
C# Programming Course
Module 1: Introduction to C#
- Introduction to C#
- Setting Up the Development Environment
- Hello World Program
- Basic Syntax and Structure
- Variables and Data Types
Module 2: Control Structures
Module 3: Object-Oriented Programming
- Classes and Objects
- Methods
- Constructors and Destructors
- Inheritance
- Polymorphism
- Encapsulation
- Abstraction
Module 4: Advanced C# Concepts
- Interfaces
- Delegates and Events
- Generics
- Collections
- LINQ (Language Integrated Query)
- Asynchronous Programming
Module 5: Working with Data
Module 6: Advanced Topics
- Reflection
- Attributes
- Dynamic Programming
- Memory Management and Garbage Collection
- Multithreading and Parallel Programming
