A Hashtable is a non-generic collection that stores key/value pairs that are arranged based on the hashcode of each key.
The Hashtable Class implements ICollection.
	Create a Hashtable
To create Hashtable in C#, we need to use the System.Collections namespace. Here is how we can create a Hashtable in C#.
// create a hashtable
Hashtable myTable = new Hashtable();
Example: Create a Hashtable
using System;
using System.Collections;
class Program
{
    public static void Main()
    {
        // create a hashtable
        Hashtable myTable = new Hashtable();
        // add items to hashtable
        myTable.Add("Name", "Ginny");
        myTable.Add("RollNumber", 12);
        myTable.Add("Address", "Miami");
        // print value of the element whose key is "RollNumber"
        Console.WriteLine(myTable["RollNumber"]);
    }
}
Output
12
Basic Operations on Hashtable
In C#, we can perform different operations on a hashtable. We will look at some commonly used Hashtable operations in this tutorial:
- Add Elements
 - Access Elements
 - Change Elements
 - Remove Elements
 
Let's see how we can perform these operations in detail!
Add Elements in Hashtable
C# provides the Add() method using which we can add elements in Hashtable. For example,
using System;
using System.Collections;
class Program
{
    public static void Main()
    {
        // create a hashtable
        Hashtable myTable = new Hashtable();
        // add items to hashtable
        myTable.Add("Subject", "Math");
        myTable.Add("Code", 139);
    }
}
In the above example, we have created a Hashtable named myTable. 
Here we have added key/value pairs using the Add() method:
- keys - 
"Subject"and"Code" - values - 
"Math"and 139 
Note: In Hashtable, keys must be unique and cannot be null. However, values can be null or duplicate.
Another way to add Elements to Hashtable
Hashtable without using Add() method 
We can add Hashtable elements without using the Add() method. For example,
using System;
using System.Collections;
class Program
{
    public static void Main()
    {
        // create a hashtable and add elements 
        Hashtable myTable = new Hashtable() { { 1, "Programiz" }, { "Greet", "Hello" } };
    }
}
This is also called collection-initializer.
Access Hashtable Elements
We can access the elements inside the Hashtable using it's keys. For example,
using System;
using System.Collections;
class Program
{
    public static void Main()
    {
        // create a hashtable and add elements 
        Hashtable myTable = new Hashtable();
        // add items to hashtable
        myTable.Add("Employee", "James");
        myTable.Add("Id", 13);
        // access the value whose key is "Employee"
        Console.WriteLine(myTable["Employee"]);
       // access the value whose key is "Id"
        Console.WriteLine(myTable["Id"]);
    }
}
Output
James 13
In the above example, we have accessed the values of Hashtable using their keys:
myTable["Employee"]- accesses the value whose key is"Employee"myTable["Id"]- accesses the value whose key is"Id"
Iterate Hashtable
In C#, we can also loop through each element of Hashtable using a foreach loop. For example,
using System;
using System.Collections;
class Program
{
    public static void Main()
    {
        // create a hashtable and add elements 
        Hashtable myTable = new Hashtable();
        // add items to hashtable
        myTable.Add("Employee", "Jake");
        myTable.Add("Id", 23);
        myTable.Add("Address", "Cornelia Street");
        // print keys of hashtable
        foreach (var item in myTable.Keys)
        {
            Console.WriteLine("Key = {0}", item);
        }
        // print values of hashtable   
        foreach (var item in myTable.Values)
        {
            Console.WriteLine("Value = {0}", item);
        }
    }
}
Output
Key = Address Key = Employee Key = Id Value = Cornelia Street Value = Jake Value = 23
In the above example, we have looped through myTable using a foreach loop. 
Another way to iterate through Hashtable
The elements of Hashtable are stored in DictionaryEntry so we can use DictionaryEntry to iterate through Hashtable. For example, 
using System;
using System.Collections;
class Program
{
    public static void Main()
    {
        // create a hashtable and add elements 
        Hashtable myTable = new Hashtable();
        // add items to hashtable
        myTable.Add("Employee", "Jake");
        myTable.Add("Id", 23);
        myTable.Add("Address", "Cornelia Street");
        // iterate using DictionaryEntry
        foreach (DictionaryEntry item in myTable)
        {
            Console.WriteLine("{0} : {1} ", item.Key, item.Value);
        }
    }
}
Output
Employee : Jake Address : Cornelia Street Id : 23
Change Hashtable Elements
We can change the value of elements in Hashtable as: 
using System;
using System.Collections;
class Program
{
    public static void Main()
    {
        // create a hashtable and add elements 
        Hashtable myTable = new Hashtable();
        // add items to hashtable
        myTable.Add("Employee", "Jake");
        myTable.Add("Id", 23);
        myTable.Add("Address", "Cornelia Street");
        // print original value 
        Console.WriteLine("Value of Address before changing: " + myTable["Address"]);
        // change the value of "Address" key to "Ontario"
        myTable["Address"] = "Ontario";
        // print new updated value of "Address"
        Console.WriteLine("Value of Address after changing: " + myTable["Address"]);
    }
}
Output
Value of Address before changing: Cornelia Street Value of Address after changing: Ontario
Here, we have changed the value of the "Address" key in myTable.
Remove Hashtable Elements
To remove the elements of Hashtable we use:
Remove(key)- removes the element according to the specified key
For example,
using System;
using System.Collections;
class Program
{
    public static void Main()
    {
        // create a hashtable and add elements 
        Hashtable myTable = new Hashtable();
        // add items to hashtable
        myTable.Add("Employee", "Tom");
        myTable.Add("Id", 5);
        myTable.Add("Address", "London");
        Console.WriteLine("Original Hashtable :");
        foreach (DictionaryEntry item in myTable)
        {
            Console.WriteLine("{0} : {1} ", item.Key, item.Value);
        }
        // remove value with key "Id"
        myTable.Remove("Id");
        Console.WriteLine("\nModified Hashtable :");
        // iterate through the modified hashtable
        foreach (DictionaryEntry item in myTable)
        {
            Console.WriteLine("{0} : {1} ", item.Key, item.Value);
        }
    }
}
Output
Original Hashtable : Employee : Tom Address : London Id : 5 Modified Hashtable : Employee : Tom Address : London
In the above example, we have removed the element whose key is "Id". 
Here, myTable.Remove("Id") removes 5 from myTable. So when we iterate through myTable we get a modified Hashtable that does not contain "Id".