+ /// Compares strings ignoring case and culture
+ public class IgnoreCaseEqualityComparer : IEqualityComparer<string>
+ private const int _multiplier = 89;
+ #region IEqualityComparer Implementation
+ public bool Equals(string x, string y)
+ if (x == null || y == null)
+ return x.Equals(y, StringComparison.InvariantCultureIgnoreCase);
+ public int GetHashCode(string obj)
+ // Fault value for empty strings
+ if (String.IsNullOrEmpty(obj))
+ // Get length to determine first and last chars
+ char firstLetter = obj.First();
+ char lastLetter = obj.Last();
+ // Compute hash code from two characters
+ int part1 = firstLetter + obj.Length;
+ hashCode = (_multiplier * part1) + lastLetter + obj.Length;