REW

How To Remove A Key From A Dictionary In C#?

Published Aug 29, 2025 4 min read
On this page

In C#, you can remove a key from a standard Dictionary<TKey, TValue> using the Remove(TKey) method, which takes the key as a parameter. For a thread-safe ConcurrentDictionary<TKey, TValue>, you should use the TryRemove(TKey, out TValue) method.

Removing a key from Dictionary<TKey, TValue>

The Remove() method is the most straightforward approach for a standard dictionary.

Syntax

public bool Remove (TKey key);

Use code with caution.

  • Returns bool: true if the key was found and the element was removed; false if the key was not found.
  • Does not throw an exception: If the specified key is not in the dictionary, no exception is thrown, and the method simply returns false. This behavior means you can call Remove() without first checking for the key's existence with ContainsKey(), which is more efficient.
  • Throws ArgumentNullException: If the key is null.

Example

using System;
using System.Collections.Generic;
public class Program
{
    public static void Main()
    {
        // 1. Create and populate a dictionary
        var capitalCities = new Dictionary<string, string>
        {
            {"France", "Paris"},
            {"Spain", "Madrid"},
            {"Italy", "Rome"}
        };
        Console.WriteLine("Original dictionary:");
        foreach (var city in capitalCities)
        {
            Console.WriteLine($"Key: {city.Key}, Value: {city.Value}");
        }
        // 2. Remove an existing key
        bool wasRemoved = capitalCities.Remove("Spain");
        Console.WriteLine($"\nRemoving 'Spain'. Was successful: {wasRemoved}");
        // 3. Attempt to remove a non-existent key
        bool notRemoved = capitalCities.Remove("Germany");
        Console.WriteLine($"Attempting to remove 'Germany'. Was successful: {notRemoved}");
        // 4. Show the updated dictionary
        Console.WriteLine("\nUpdated dictionary:");
        foreach (var city in capitalCities)
        {
            Console.WriteLine($"Key: {city.Key}, Value: {city.Value}");
        }
    }
}

Use code with caution.

Output:

Original dictionary:
Key: France, Value: Paris
Key: Spain, Value: Madrid
Key: Italy, Value: Rome
Removing 'Spain'. Was successful: True
Attempting to remove 'Germany'. Was successful: False
Updated dictionary:
Key: France, Value: Paris
Key: Italy, Value: Rome

Removing a key from ConcurrentDictionary<TKey, TValue>

For thread-safe scenarios, you must use ConcurrentDictionary and its TryRemove() method. This prevents race conditions where multiple threads might try to modify the collection simultaneously.

Syntax

public bool TryRemove (TKey key, out TValue value);

Use code with caution.

  • Attempts a removal: TryRemove() attempts to remove the key-value pair and returns true on success or false on failure.
  • Returns the removed value: If successful, the out TValue value parameter will contain the value that was removed. If the operation fails, value will be the default value for the type.

Example

using System;
using System.Collections.Concurrent;
public class Program
{
    public static void Main()
    {
        var concurrentDict = new ConcurrentDictionary<int, string>();
        concurrentDict.TryAdd(1, "Alpha");
        concurrentDict.TryAdd(2, "Beta");
        concurrentDict.TryAdd(3, "Gamma");
        Console.WriteLine("Original concurrent dictionary:");
        foreach (var item in concurrentDict)
        {
            Console.WriteLine($"Key: {item.Key}, Value: {item.Value}");
        }
        // Remove an existing key and retrieve its value
        if (concurrentDict.TryRemove(2, out string removedValue))
        {
            Console.WriteLine($"\nRemoved key 2. Value was: {removedValue}");
        }
        // Attempt to remove a non-existent key
        if (!concurrentDict.TryRemove(4, out _))
        {
            Console.WriteLine("Key 4 was not found and could not be removed.");
        }
        Console.WriteLine("\nUpdated concurrent dictionary:");
        foreach (var item in concurrentDict)
        {
            Console.WriteLine($"Key: {item.Key}, Value: {item.Value}");
        }
    }
}

Use code with caution.

Output:

Original concurrent dictionary:
Key: 1, Value: Alpha
Key: 2, Value: Beta
Key: 3, Value: Gamma
Removed key 2. Value was: Beta
Key 4 was not found and could not be removed.
Updated concurrent dictionary:
Key: 1, Value: Alpha
Key: 3, Value: Gamma

Advanced considerations

Removing multiple keys

Removing multiple items in a loop should be done carefully. For a standard Dictionary, it is unsafe to modify the collection while you are iterating over it directly. You can use a for loop with a list of keys to remove.

Example for removing multiple keys

var myDict = new Dictionary<string, int>
{
    {"a", 1}, {"b", 2}, {"c", 3}, {"d", 4}
};
var keysToRemove = new List<string> { "b", "d" };
foreach (var key in keysToRemove)
{
    myDict.Remove(key);
}

Use code with caution.

Performance of Remove()

  • Time complexity: The Remove() method on a Dictionary is an O(1) operation on average, meaning its performance is extremely fast and constant, regardless of the dictionary's size.
  • Removing vs. retaining: There are generally no significant performance benefits to removing items from a dictionary after a lookup unless you need to reduce memory usage.

Clearing all key-value pairs

If you need to remove all items from a dictionary, the most efficient method is to use Clear(), which resets the internal count to zero. This is much faster than looping through and removing each item individually.

Example for clearing a dictionary

var myDict = new Dictionary<string, string>
{
    {"UK", "London"}, {"USA", "Washington"}
};
myDict.Clear(); // Removes all elements
Console.WriteLine($"Count after clear: {myDict.Count}");

Use code with caution.

Output:

Count after clear: 0
Enjoyed this article? Share it with a friend.