C# Dictionary<string, string>

Posted on 2011-03-06
Medium Priority
Last Modified: 2013-12-17
I'm testing this sample code I got from www.dotnetperls.com .

1. What is the default hash algorithm being used for the key strings?

I see:
"string1" hashed to 0x2163a1a6
"string2" hashed to 0x440b1641

Is this a good hash algorithm for long strings?

using System;
using System.Collections.Generic;

namespace dicstring
    class Program
        static void Main(string[] args)
            // A. Create a new Dictionary with two keys and two values.
            Dictionary<string, string> example = new Dictionary<string, string>();
            example.Add("string1", "C#");
            example.Add("string2", "Perl");

            // B. Lookup a string in the Dictionary.
            string value;
            if (example.TryGetValue("string2", out value))
                Console.WriteLine("Found {0}", value);

            // C. See if it contains this key.

            // D. Add this key if it isn't there.
            if (!example.ContainsKey("string3"))
                example.Add("string3", "VB.NET");

            // E. Enumerate the keys
            foreach (var pair in example)
                Console.WriteLine("Key = {0}, Value = {1}", pair.Key, pair.Value);

Open in new window

Question by:deleyd

Expert Comment

ID: 35053604
what u want to know?
LVL 45

Expert Comment

ID: 35053962
>>Is this a good hash algorithm for long strings?

Yes, because it works.  The algorithm MUST result in different values for different entries.  Do not attempt to write your own algorithm unless you know what you are doing.

Author Comment

ID: 35057971
How can I find out what the hash algorithm is? Is it documented somewhere? Or do I just have to trace the code internals to find out the hard way?
LVL 23

Accepted Solution

wdosanjos earned 2000 total points
ID: 35060319
I used .NET Reflector to disassemble String.GetHashCode() (.NET Framework 4).  Here is the result:

[ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail), SecuritySafeCritical]
public override unsafe int GetHashCode()
    fixed (char* str = ((char*) this))
        char* chPtr = str;
        int num = 0x15051505;
        int num2 = num;
        int* numPtr = (int*) chPtr;
        for (int i = this.Length; i > 0; i -= 4)
            num = (((num << 5) + num) + (num >> 0x1b)) ^ numPtr[0];
            if (i <= 2)
            num2 = (((num2 << 5) + num2) + (num2 >> 0x1b)) ^ numPtr[1];
            numPtr += 2;
        return (num + (num2 * 0x5d588b65));

Open in new window

Here is a note from the String.GetHashCode() documentation:

The behavior of GetHashCode is dependent on its implementation, which might change from one version of the common language runtime to another. A reason why this might happen is to improve the performance of GetHashCode.
Note Note

Notes to Callers

The value returned by GetHashCode is platform-dependent. It differs on the 32-bit and 64-bit versions of the .NET Framework.

Author Closing Comment

ID: 35064278
Thank you for alerting me to .NET Reflector

Featured Post

Train for your Pen Testing Engineer Certification

Enroll today in this bundle of courses to gain experience in the logistics of pen testing, Linux fundamentals, vulnerability assessments, detecting live systems, and more! This series, valued at $3,000, is free for Premium members, Team Accounts, and Qualified Experts.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

This article shows how to deploy dynamic backgrounds to computers depending on the aspect ratio of display
High user turnover can cause old/redundant user data to consume valuable space. UserResourceCleanup was developed to address this by automatically deleting user folders when the user account is deleted.
Planning to migrate your EDB file(s) to a new or an existing Outlook PST file? This video will guide you how to convert EDB file(s) to PST. Besides this, it also describes, how one can easily search any item(s) from multiple folders or mailboxes…
The video provides a quick and easy steps to migrate MBOX file to well known Outlook PST and Office 365. Besides this, it also supports and migrates more than 20 email clients of MBOX which include AppleMail, Opera, Thunderbird and SeaMonkey effortl…

607 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question