Ich möchte testen, ob eine ID noch nicht bekannt war oder, falls bekannt, ob sich der zugehörige Wert geändert hat. Ich verwende derzeit Code ähnlich, aber es ist schwer zu verstehen für diejenigen, die nicht mit dem Muster vertraut sind. Können Sie sich einen Weg vorstellen, um es lesbarer zu machen, während Sie es im LOC kurz halten?Wie kann ich diesen Wörterbuch-TryGetValue-Code lesbarer machen?
string id;
string actual;
string stored;
if (!someDictionary.TryGetValue (id, out stored) || stored != actual) {
// id not known yet or associated value changed.
}
Es ist nicht ganz dasselbe wie jede 2-Bedingung-Anweisung, insofern es die Vordeklaration des 'out'-Parameters erfordert. "…an etwas gewöhnen?" Es ist nicht so, dass Entwickler "per se" "verwirrt" sind. Selbst ein erfahrener Programmierer, der von links nach rechts liest, muss hin- und herspringen, nur um das zu lesen, und dabei verschiedene Elemente im Kopf jonglieren. Dies ist keine * schwere * Aufgabe, aber es ist auch nicht selbstverständlich. Dies ist ein etwas prozeduraler Code und führt Möglichkeiten für Wiederholungen und Fehler ein. Lesbarkeit ist ein legitimes Problem und 'TryGetValue' mit einem' bool' Ergebnis ist semantisch schwach. – Jay
@Jay: Warum sollten Sie die Deklaration der out-Variablen überprüfen? Es ist offensichtlich da (oder der Compiler würde sich beschweren), und Sie sollten sich nicht kümmern, was der Wert vorher war (da es ein out-Parameter ist, wird der Wert nicht von der Funktion verwendet). Geht es wirklich nur um "out" anstatt um bedingte? Über die einzigen Punkte, die ich zu dieser Aussage zugestehen würde, gehören 1.) Nebenwirkungen sind im Konditional und 2.) die Bedingungen sind auftragsabhängig. 'bool Try * (out)' ist eine gut etablierte Redewendung in der BCL, von der ich erwarte, dass die Entwickler ranken, also vergebe ich die erste. –
@Jay: Ihr Kommentar ist "Spot-on". Meiner Meinung nach betrifft keine der Antworten die Lesbarkeit. Deshalb habe ich meinen vorgeschlagenen Code beigetragen. – AMissico