In this article [Show more]
Hashtable in C# with Example
In C#, the Hashtable class is a collection that stores key-value pairs. It allows efficient access and management of data using keys. Although it's been largely replaced by the generic Dictionary<TKey, TValue>, Hashtable is still relevant in certain scenarios. This article provides an overview of Hashtable and a practical example of its usage.
Features of Hashtable
- Key-Value Pair Storage: Stores objects as key-value pairs.
- Non-Generic: Keys and values are stored as objects.
- Null Handling: Supports null values and keys.
- Thread Safety: Limited support for thread safety through the SyncRoot property.
- Boxing/Unboxing: Requires boxing/unboxing for value types.
Example: Creating and Using a Hashtable
Basic Operations
Here's how to create a Hashtable, add key-value pairs, and read data:
using System;
using System.Collections;
public class HashtableExample
{
public static void Main()
{
// Create a new Hashtable
Hashtable table = new Hashtable
{
{ "USA", "Washington, D.C." },
{ "UK", "London" },
{ "France", "Paris" },
{ "Germany", "Berlin" }
};
// Add a new key-value pair
table["Japan"] = "Tokyo";
// Access values using keys
Console.WriteLine($"Capital of USA: {table["USA"]}");
Console.WriteLine($"Capital of Japan: {table["Japan"]}");
// Check if a key exists
string country = "Italy";
if (!table.ContainsKey(country))
{
Console.WriteLine($"Key '{country}' not found.");
}
// Remove a key-value pair
table.Remove("France");
// Iterate through the hashtable using a foreach loop
Console.WriteLine("\nRemaining elements in the hashtable:");
foreach (DictionaryEntry entry in table)
{
Console.WriteLine($"{entry.Key}: {entry.Value}");
}
}
}
Key Operations
- Add: Adds a new key-value pair using Add(key, value).
- Remove: Removes a key-value pair using Remove(key).
- ContainsKey: Checks if a specific key exists.
- Count: Returns the number of key-value pairs.
- Clear: Removes all key-value pairs from the hashtable.
Best Practices
- Avoid Null Keys: Although Hashtable allows null keys, it's better to use non-null keys for consistent data management.
- Type Safety: Handle value types carefully to avoid errors due to boxing/unboxing.
- Thread Safety: Use SyncRoot or a synchronized wrapper for multi-threaded scenarios.
Conclusion
Hashtable in C# is a versatile collection for managing key-value pairs, especially when you require non-generic data handling or compatibility with legacy code. By understanding its features, operations, and best practices, you can leverage it effectively in your applications