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?

È stato utile?

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 :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top