Che cos'è & # 8220; ?? & # 8221; operatore per? [duplicare]
-
05-07-2019 - |
Domanda
Questa domanda ha già una risposta qui:
Mi chiedevo i segni ??
nel codice C #
. Cosa serve? E come posso usarlo?
Che dire di int?
? È un int nullable?
Vedi anche:
?? Null Coalescing Operator & # 8212; > Cosa significa coalescenza?
Soluzione
Si chiama l'operatore "null coalescing" e funziona in questo modo:
Invece di fare:
int? number = null;
int result = number == null ? 0 : number;
Ora puoi semplicemente fare:
int result = number ?? 0;
Altri suggerimenti
È il operatore di coalescenza null . È stato introdotto in C # 2.
Il risultato dell'espressione a ?? b
è a
se non è null, oppure b
in caso contrario. b
non viene valutato a meno che non sia necessario.
Due cose carine:
-
Il tipo generale dell'espressione è quello del secondo operando, che è importante quando si utilizzano tipi di valori nullable:
int? maybe = ...; int definitely = maybe ?? 10;
(Si noti che non è possibile utilizzare un tipo di valore non annullabile come primo operando: sarebbe inutile.)
-
Le regole di associatività significano che puoi concatenarlo facilmente. Ad esempio:
string address = shippingAddress ?? billingAddress ?? contactAddress;
Questo utilizzerà il primo valore non nullo fuori dall'indirizzo di spedizione, fatturazione o contatto.
Questo è l'operatore di coesione. In sostanza è una scorciatoia per il seguente
x ?? new Student();
x != null ? x : new Student();
Documentazione MSDN sull'operatore
È il nuovo operatore Null Coalesce.
Il ?? l'operatore restituisce l'operando di sinistra se non è null, oppure restituisce l'operando di destra.
Puoi leggerlo qui: http://msdn.microsoft.com/en-us/ biblioteca / ms173224 (VS.80) aspx
È una scorciatoia per:
Text = (category == null ? "Home" : category);
è l'operatore di coesione. restituirà un altro valore se il primo valore è null
string value1 = null;
string value2 = "other";
string value3 = value1 ?? value2; // assigns "other" to value 3
controlla se la categoria è nulla - in questo caso il valore null viene sostituito da " Home " ;.
Uno dei miei usi preferiti per l'operatore di coalescenza nulla è quello di evitare se le istruzioni nel mio codice (penso che se le dichiarazioni sono brutte e ingombrano la maggior parte delle volte). Ad esempio, prendi uno scenario tipico in cui si potrebbe scegliere di caricare qualcosa dalla cache, se disponibile, altrimenti caricare dal db e popolare la cache.
private SomeData GetData() {
var data = HttpRuntime.Cache.Get("key") as SomeData;
if (data == null) {
data = DAL.GetData(some parameters...);
HttpRuntime.Cache.Add("key", data, ....);
}
return data;
}
Per me è un brutto codice. Potrei essere un po 'anale, ma perché non rifattarlo in questo invece?
private SomeData GetDataAndCache() {
var data = DAL.GetData(some parameters...);
HttpRuntime.Cache.Add("key", data, ....);
return data;
}
private SomeData GetData() {
var data = HttpRuntime.Cache.Get("key") as SomeData;
return data ?? GetDataAndCache();
}
Segue più da vicino SRP ed è più pulito e più facile da leggere, IMO. Le funzioni svolgono esattamente una funzione chiaramente identificabile ciascuna.
se la categoria è nulla, il testo diventerà " Home "
Restituisce il primo valore non nullo. Handy.
?? Operatore a coalescenza nulla
int? è un int nullable, il che significa che può avere i valori di un int normale e null. Leggi questo per i dettagli.
Questo è operatore a coalescenza nulla . È utilizzato con tipi nullable (tra le altre cose , scusa :)