Share via


Dictionary<TKey, TValue> Constructor (Int32, IEqualityComparer<TKey>)

Microsoft Silverlight will reach end of support after October 2021. Learn more.

Initializes a new instance of the Dictionary<TKey, TValue> class that is empty, has the specified initial capacity, and uses the specified IEqualityComparer<T>.

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

Syntax

'Declaration
Public Sub New ( _
    capacity As Integer, _
    comparer As IEqualityComparer(Of TKey) _
)
public Dictionary(
    int capacity,
    IEqualityComparer<TKey> comparer
)

Parameters

Exceptions

Exception Condition
ArgumentOutOfRangeException

capacity is less than 0.

Remarks

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<TKey, TValue> must be unique according to the specified comparer.

The capacity of a Dictionary<TKey, TValue> is the number of elements that can be added to the Dictionary<TKey, TValue> before resizing is necessary. As elements are added to a Dictionary<TKey, TValue>, the capacity is automatically increased as required by reallocating the internal array.

If the size of the collection can be estimated, specifying the initial capacity eliminates the need to perform a number of resizing operations while adding elements to the Dictionary<TKey, TValue>.

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

This constructor is an O(1) operation.

Examples

The following code example creates a Dictionary<TKey, TValue> with an initial capacity of 5 and 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.Collections.Generic

Public Class Example

   Public Shared Sub Demo(ByVal outputBlock As System.Windows.Controls.TextBlock)

      ' Create a new Dictionary of strings, with string keys, an
      ' initial capacity of 5, and a case-insensitive equality
      ' comparer.
      Dim openWith As New Dictionary(Of String, String)(5, _
          StringComparer.CurrentCultureIgnoreCase)

      ' Add 4 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.
      Try
         openWith.Add("BMP", "paint.exe")
      Catch ex As ArgumentException
         outputBlock.Text &= vbLf & "BMP is already in the dictionary." & vbCrLf
      End Try

      ' List the contents of the dictionary.
      outputBlock.Text &= vbCrLf
      For Each kvp As KeyValuePair(Of String, String) In openWith
         outputBlock.Text &= String.Format("Key = {0}, Value = {1}", _
             kvp.Key, kvp.Value) & vbCrLf
      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
using System;
using System.Collections.Generic;

public class Example
{
   public static void Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      // Create a new dictionary of strings, with string keys, an
      // initial capacity of 5, and a case-insensitive equality 
      // comparer.
      Dictionary<string, string> openWith =
                    new Dictionary<string, string>(5,
                        StringComparer.CurrentCultureIgnoreCase);

      // Add 4 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.
      try
      {
         openWith.Add("BMP", "paint.exe");
      }
      catch (ArgumentException)
      {
         outputBlock.Text += "\nBMP is already in the dictionary." + "\n";
      }

      // List the contents of the dictionary.
      outputBlock.Text += "\n";
      foreach (KeyValuePair<string, string> kvp in openWith)
      {
         outputBlock.Text += String.Format("Key = {0}, Value = {1}", kvp.Key,
             kvp.Value) + "\n";
      }
   }
}

/* 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
 */

Version Information

Silverlight

Supported in: 5, 4, 3

Silverlight for Windows Phone

Supported in: Windows Phone OS 7.1, Windows Phone OS 7.0

XNA Framework

Supported in: Xbox 360, Windows Phone OS 7.0

Platforms

For a list of the operating systems and browsers that are supported by Silverlight, see Supported Operating Systems and Browsers.