Was this page helpful?
Your feedback about this content is important. Let us know what you think.
Additional feedback?
1500 characters remaining
Dictionary(TKey, TValue) Constructor (IEqualityComparer(TKey))

Dictionary(Of TKey, TValue) Constructor (IEqualityComparer(Of TKey))

Initializes a new instance of the Dictionary(Of TKey, TValue) class that is empty, has the default initial capacity, and uses the specified IEqualityComparer(Of T).

Namespace:  System.Collections.Generic
Assemblies:   mscorlib (in mscorlib.dll)
  System.Collections (in System.Collections.dll)

Public Sub New ( _
	comparer As IEqualityComparer(Of TKey) _


Type: System.Collections.Generic.IEqualityComparer(Of TKey)

The IEqualityComparer(Of T) implementation to use when comparing keys, or Nothing to use the default EqualityComparer(Of T) for the type of the key.

Use this constructor with the case-insensitive string comparers provided by the StringComparer class to create dictionaries with case-insensitive string keys.

Every key in a Dictionary(Of TKey, TValue) must be unique according to the specified comparer.

Dictionary(Of TKey, TValue) requires an equality implementation to determine whether keys are equal. If comparer is Nothing, this constructor uses the default generic equality comparer, EqualityComparer(Of T).Default. If type TKey implements the System.IEquatable(Of T) generic interface, the default equality comparer uses that implementation.


If you can estimate the size of the collection, using a constructor that specifies the initial capacity eliminates the need to perform a number of resizing operations while adding elements to the Dictionary(Of TKey, TValue).

This constructor is an O(1) operation.

The following code example creates a Dictionary(Of TKey, TValue) with a case-insensitive equality comparer for the current culture. The example adds four elements, some with lower-case keys and some with upper-case keys. The example then attempts to add an element with a key that differs from an existing key only by case, catches the resulting exception, and displays an error message. Finally, the example displays the elements in the dictionary.

Imports System
Imports System.Collections.Generic

Public Class Example

    Public Shared Sub Main() 

        ' Create a new Dictionary of strings, with string keys  
        ' and a case-insensitive comparer for the current culture. 
        Dim openWith As New Dictionary(Of String, String)( _

        ' Add some elements to the dictionary. 
        openWith.Add("txt", "notepad.exe")
        openWith.Add("bmp", "paint.exe")
        openWith.Add("DIB", "paint.exe")
        openWith.Add("rtf", "wordpad.exe")

        ' Try to add a fifth element with a key that is the same  
        ' except for case; this would be allowed with the default 
        ' comparer. 
            openWith.Add("BMP", "paint.exe")
        Catch ex As ArgumentException
            Console.WriteLine(vbLf & "BMP is already in the dictionary.")
        End Try 

        ' List the contents of the dictionary.
        For Each kvp As KeyValuePair(Of String, String) In openWith
            Console.WriteLine("Key = {0}, Value = {1}", _
                kvp.Key, kvp.Value)
        Next kvp

    End Sub 

End Class 

' This code example produces the following output: 

'BMP is already in the dictionary. 

'Key = txt, Value = notepad.exe 
'Key = bmp, Value = paint.exe 
'Key = DIB, Value = paint.exe 
'Key = rtf, Value = wordpad.exe

.NET Framework

Supported in: 4.6, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

XNA Framework

Supported in: 3.0, 2.0, 1.0

.NET for Windows Phone apps

Supported in: Windows Phone 8.1, Windows Phone Silverlight 8.1, Windows Phone Silverlight 8

Portable Class Library

Supported in: Portable Class Library
© 2015 Microsoft