Vorrei provare se un ID non era ancora noto o, se è noto, se il valore associato è cambiato. Attualmente sto usando un codice simile a questo, ma è difficile da capire per chi non ha familiarità con il modello. Riesci a pensare a un modo per renderlo più leggibile senza tenerlo a LOC?Come posso rendere più leggibile questo codice TryGetValue del dizionario?
string id;
string actual;
string stored;
if (!someDictionary.TryGetValue (id, out stored) || stored != actual) {
// id not known yet or associated value changed.
}
Non è esattamente la stessa cosa di qualsiasi istruzione a due condizioni in quanto richiede la pre-dichiarazione del parametro 'out'. "... ci si abitua?" Non è che gli sviluppatori siano "confusi", * di per sé *. Anche un veterano programmatore che legge da sinistra a destra deve rimbalzare avanti, indietro e in alto solo per leggere questo, e manipolare diversi elementi nella mente mentre lo fa. Questo non è un compito * difficile *, ma non è nemmeno naturale. Questo è in qualche modo un codice procedurale e introduce opportunità per la ripetizione e l'errore. La leggibilità è una preoccupazione legittima e 'TryGetValue' con un risultato' bool' è semanticamente debole. – Jay
@Jay: Perché dovresti controllare la dichiarazione della variabile out? Ovviamente c'è (o il compilatore si lamenterebbe), e non dovresti preoccuparti di quale fosse il valore precedente (dato che è un parametro out, il valore non è usato dalla funzione). Si tratta davvero di "out" invece del condizionale? Circa gli unici punti che ammetterei su questa affermazione è che 1.) gli effetti collaterali sono condizionali, e 2.) i condizionali dipendono dall'ordine. 'bool Try * (out)' è un idioma ben consolidato nel BCL che mi aspetto che gli sviluppatori siano interessati, quindi perdono il primo. –
@ Jay: il tuo commento è "azzeccato". A mio parere, nessuna delle risposte risolve la leggibilità. Questo è il motivo per cui ho assegnato il mio codice suggerito. – AMissico