Ich habe Schwierigkeiten, meinen benutzerdefinierten IComparer für mein SortedDictionary<> zu verwenden. Das Ziel ist es, E-Mail-Adressen in einem bestimmten Format (firstnam.lastname@domain.com) als Schlüssel zu verwenden und nach Nachnamen zu sortieren. Wenn ich etwas wie dies tun:
public class Program
{
public static void Main(string[] args)
{
SortedDictionary<string, string> list = new SortedDictionary<string, string>(new SortEmailComparer());
list.Add("a.johansson@domain.com", "value1");
list.Add("b.johansson@domain.com", "value2");
foreach (KeyValuePair<string, string> kvp in list)
{
Console.WriteLine(kvp.Key);
}
Console.ReadLine();
}
}
public class SortEmailComparer : IComparer<string>
{
public int Compare(string x, string y)
{
Regex regex = new Regex("\\b\\w*@\\b",
RegexOptions.IgnoreCase
| RegexOptions.CultureInvariant
| RegexOptions.IgnorePatternWhitespace
| RegexOptions.Compiled
);
string xLastname = regex.Match(x).ToString().Trim('@');
string yLastname = regex.Match(y).ToString().Trim('@');
return xLastname.CompareTo(yLastname);
}
}
Ich erhalte diese ArgumentException: An entry with the same key already exists.
beim Hinzufügen des zweiten Elements.
Ich habe nicht mit einem benutzerdefinierten IComparer für ein SortedDictionary vor gearbeitet, und ich sehe nicht meinen Fehler, was mache ich falsch?