CaseInsensitiveHashCodeProvider Class

System.Collections Namespace
<< ArrayList | ICollection >>

Table of Contents

Overview

Provides a case-insensitive hash code implementation.

The CaseInsensitiveHashCodeProvider class implements the IHashCodeProvider interface, providing a hash code based on the string's case-insensitive representation. This is particularly useful when storing strings in hash tables (like `Hashtable`) where case sensitivity needs to be ignored for key comparisons. It ensures that strings differing only in case will produce the same hash code, facilitating case-insensitive lookups.

Syntax

public sealed class CaseInsensitiveHashCodeProvider : IHashCodeProvider
            

Introduction

In .NET, hashing is a fundamental mechanism for efficient data retrieval in collection types such as dictionaries and hash tables. By default, string comparisons and hash code generation in .NET are case-sensitive. The CaseInsensitiveHashCodeProvider addresses scenarios where case sensitivity is undesirable. It provides a way to generate a hash code for a string that is independent of its casing, making it compatible with collections that require case-insensitive key matching.

Constructors

CaseInsensitiveHashCodeProvider()

Initializes a new instance of the CaseInsensitiveHashCodeProvider class.

public CaseInsensitiveHashCodeProvider()

Properties

This class does not contain any public properties.

Methods

GetHashCode(object obj)

Returns a hash code for the specified object, which is based on the case-insensitive representation of the object.

public int GetHashCode(object obj)

Parameters

  • obj: An Object for which to generate a hash code.

Returns

A 32-bit signed integer hash code based on the case-insensitive representation of the specified object.

Remarks

If the input object is not a string, this method will delegate to the default Object.GetHashCode() method. For string objects, it converts the string to lowercase before computing the hash code, ensuring case insensitivity.

Remarks

The CaseInsensitiveHashCodeProvider is typically used in conjunction with a case-insensitive comparer when initializing a Hashtable. For example, you would pass an instance of CaseInsensitiveHashCodeProvider as the hashProvider argument to the Hashtable constructor along with an instance of CaseInsensitiveComparer for the IComparer argument.

While CaseInsensitiveHashCodeProvider was a common pattern, modern .NET development often favors generic collections like Dictionary<TKey, TValue>, which can be initialized with a specific IEqualityComparer<TKey>, offering more flexibility and type safety.

Requirements

Requirements

  • Namespace: System.Collections
  • Assembly: mscorlib.dll

Code Example

The following example demonstrates how to use CaseInsensitiveHashCodeProvider and CaseInsensitiveComparer with a Hashtable to store and retrieve elements in a case-insensitive manner.

using System;
using System.Collections;

public class Example
{
    public static void Main()
    {
        // Create a case-insensitive comparer and hash code provider
        IComparer caseInsensitiveComparer = CaseInsensitiveComparer.Default;
        IHashCodeProvider hashCodeProvider = new CaseInsensitiveHashCodeProvider();

        // Initialize a Hashtable with case-insensitive behavior
        Hashtable myTable = new Hashtable(hashCodeProvider, caseInsensitiveComparer);

        // Add elements with different casing
        myTable.Add("apple", 1);
        myTable.Add("Banana", 2);
        myTable.Add("CHERRY", 3);

        // Retrieve elements, demonstrating case insensitivity
        Console.WriteLine("Value for 'Apple': " + myTable["Apple"]);      // Output: Value for 'Apple': 1
        Console.WriteLine("Value for 'banana': " + myTable["banana"]);    // Output: Value for 'banana': 2
        Console.WriteLine("Value for 'Cherry': " + myTable["Cherry"]);    // Output: Value for 'Cherry': 3

        // Check if a key exists, demonstrating case insensitivity
        Console.WriteLine("Contains key 'APPLE': " + myTable.ContainsKey("APPLE")); // Output: Contains key 'APPLE': True
        Console.WriteLine("Contains key 'Date': " + myTable.ContainsKey("Date"));   // Output: Contains key 'Date': False
    }
}