Avendo incontrato personalmente questa situazione, ho deciso di controllare il mio codice in cui mi occupo di questo. Tendo ad avere due soluzioni, entrambe coinvolgono l'operatore coalescente null.
Caso 1: inizializzazione. Utilizzando i valori dall'alto, questo diventa:
object a = null ?? something;
Ovviamente, non vorrei scrivere che riga di codice (ReSharper si lamentano se non altro). Ma è l'essenza di ciò che sta accadendo. Se ho i due (o più) valori disponibili quando creo a
, allora lo scrivo in questo modo.
Caso 2: Non impostare mai a
, ma utilizzare ??
quando viene utilizzato a
. In questo caso, il codice sarebbe:
MethodTakingA(a ?? b);
Se non ci sono chiamate a metodi multipli o altri luoghi in cui avevo bisogno di usare ??
, allora questa è una cattiva idea.
C'è un terzo caso in cui faccio esattamente l'incarico che stai evitando. Questo è quando uno dei parametri del mio metodo potrebbe essere nullo, e ho un valore predefinito da usare in quel caso (al contrario di lanciare un ArgumentNullException
). Ecco un esempio:
public void Foo(string str)
{
str = str ?? String.Empty;
//Use str as needed below without fear that it might be null.
}
Vorrei una risposta migliore per questo caso, ma io non sono di certo la scrittura di codice in cui micro-ottimizzazione che l'assegnazione vale la pena, e la risposta teorica di
string localStr = str ?? String.Empty;
È appena aggiunta una nuova variabile per aggiungerne una. Altrimenti non mi serve per nulla, quindi tengo il mio incarico e vivo con esso.
fonte
2014-12-04 15:45:40
Quindi presumo 'a = a ?? b; 'è uscito? –
@JoelRondeau Appare così - OP non vuole che 'a' venga assegnato a se stesso. –
'if (a == null) a = b;' Se non vuoi che 'a' venga assegnato a' a' probabilmente dovrai usare un'istruzione 'if'. – heavyd