I seguenti 2 snippet di codice ottengono lo stesso risultato?Queste 2 affermazioni sono identiche?
mio codice originale:
if (safeFileNames != null)
{
this.SafeFileNames = Convert.ToBoolean(safeFileNames.Value);
}
else
{
this.SafeFileNames = false;
}
Che pensiero ReSharper era un'idea migliore:
this.SafeFileNames = safeFileNames != null &&
Convert.ToBoolean(safeFileNames.Value);
penso che il codice di cui sopra è molto più facile da leggere, qualsiasi motivo valido per cambiare?
Eseguirà più velocemente e, cosa più importante, il codice farà esattamente la stessa cosa?
Anche se si guarda la sezione: Convert.ToBoolean(safeFileNames.Value);
, sicuramente questo potrebbe causare un'eccezione di riferimento null?
this.SafeFileNames = bool
safeFileNames locale è un oggetto personalizzato fortemente tipizzato, ecco la classe:
public class Configuration
{
public string Name
{
get;
set;
}
public string Value
{
get;
set;
}
}
Non si ottiene una 'NullReferenceExcepton' dal momento che la prima parte dell'istruzione 'safeFileNames! = null' apparirà in cortocircuito e non verrà mai premuto' Convert.ToBoolean (safeFileNames.Value) '- questo è il wa y il && funziona. – Nate
Non causerebbe un'eccezione di riferimento null a causa della valutazione lenta di C#. L'istruzione && viene sempre valutata lato sinistro e lato destro. Ma se il lato sinistro è falso, non si preoccuperà di valutare il lato destro, poiché il risultato logico è già determinato. Quindi, se safeFileNames è null, la chiamata Convert.ToBoolean non viene mai eseguita. Questo genere di cose è abbastanza comune nel codice. –
Quindi se sto capendo il && - se la parte sinistra è falsa restituisce il falso ... altrimenti valuta la parte giusta e restituisce il risultato della parte giusta? –