Bernhard Krenz

SortedDictionary und ArgumentException

Neulich hatte ich einen sehr merkwürdigen Fehler bei der Verwendung eines SortedDictionary<string, string>. Ich erhielt eine ArgumentException mit der Beschreibung „Ein Eintrag mit dem gleichen Schlüssel ist bereits vorhanden.“

Das Ganze war umso verwunderlicher, da die Daten 1:1 aus einem normalen Dictionary<string, string> übernommen wurden und demzufolge der Fehler schon an dieser Stelle hätte auftreten müssen.

Um auf die Ursache des Fehlers zu kommen, habe ich folgende Testklasse geschrieben:

public class Sorter : IComparer
{
	public Sorter()
	{
		var sortedDictionary = new SortedDictionary<string, string>(this);
		sortedDictionary.Add("test", "Hallo Welt");
		sortedDictionary.Add("Test", "Hallo zurück");
	}

	public int Compare(string x, string y)
	{
		x = x.ToLower();
		y = y.ToLower();

		return x.CompareTo(y);
	}
}

Mach beachte die Zeile 12 und 13. Die Sortierung sollte case-insensitive erfolgen. Dies hat aber zur Folge, dass nicht der Angegebene Schlüssel „Test“ eingefügt, sondern der aus dem Vergleich, nämlich „test“. Ohne diese Zeilen würden der Fehler nicht auftreten.

Für mich ist dieses Verhalten nicht ganz nachvollziehbar und es fühlt sich ganz leicht nach einem Bug an. Denn obwohl die Vergleichsmethode den Wert „0“ für „gleich“ zurück gibt, sollte dennoch der ursprünglich angegebene Schlüssel verwendet werden.


Kennwort-Manager

passpack

Ich weiß nicht, wie oft ich schon durch fehlende oder vergessene Kennwörter ausgebremst wurde. Sei es durch reine Vergesslichkeit oder durch die Annahme, das Kennwort zukünftig nicht mehr zu benötigen.

Seitdem ich einen Kennwort-Manager nutze, sind solche Fälle deutlich weniger geworden. Weiterer Vorteil: Es können längere und kompliziertere Kennwörter genutzt werden, was die Sicherheit erhöht.

Da ich grundsätzlich geizig bin und mir ein Online-Zugriff wichtig war, habe ich mich nach längerer Recherche für Passpack (https://www.passpack.com) entschieden und kann den Dienst durchaus weiterempfehlen.


Copyright © 2012-2024 Bernhard Krenz Alle Rechte vorbehalten.