Domanda

Quindi C # ora ti permette di usare default(Foo) per ottenere un " riconosciuto; non ancora compilato " / un'istanza vuota di una classe - non sono sicuro che sia esattamente lo stesso come new Foo() o no. Molte classi di librerie implementano anche una proprietà Foo.Empty, che restituisce un'istanza simile. E ovviamente qualsiasi tipo di riferimento può puntare a null. Quindi davvero, qual è la differenza? Quando uno ha ragione o torto? Cosa c'è di più coerente o funziona meglio? Quali test devo usare per verificare se un oggetto è concettualmente & Quot; non pronto per il tempo di prima serata & Quot ;? Non tutti hanno Foo.IsNullOrEmpty().

È stato utile?

Soluzione

default(Foo) restituirà null quando Foo è un tipo di classe, zero dove default() è un tipo di valore (come int) e un'istanza di SomeClass<T> con tutti i campi inizializzati su loro rispettivi MyMethod<T> valori in cui String.Empty è una struttura. È stato aggiunto al linguaggio in modo che i generici potessero supportare sia il valore che i tipi di riferimento - altro informazioni su MSDN

Usa "" quando stai testando una T nel contesto di <=> o <=> e non sai se T sarà un tipo di valore, un tipo di classe o una struttura.

Altrimenti, null dovrebbe significare " sconosciuto " e vuoto dovrebbe significare " So che questo è vuoto " ;. Usa il modello Foo.Empty se hai davvero bisogno di un'istanza vuota - ma non nulla - della tua classe; per esempio. <=> in alternativa a <=> se è necessario inizializzare alcune variabili nella stringa vuota.

Usa null se sai che stai lavorando con tipi di riferimento (classi), non ci sono generici coinvolti e stai testando esplicitamente riferimenti non inizializzati.

Altri suggerimenti

Quando conosci il tipo effettivo coinvolto, o se hai un parametro di tipo vincolato con " ;: class " è più semplice usare il valore noto (null, 0 ecc.).

Quando hai appena ottenuto un parametro di tipo non vincolato o vincolato diverso da un tipo di riferimento, devi utilizzare il valore predefinito (T).

default(Foo) funziona sia per i tipi di valore che per i tipi di riferimento. New Foo(), null e Foo.Empty() no. Questo lo rende una buona scelta per l'uso con tipi generici, ad esempio, quando potresti non sapere con chi hai a che fare. Ma nella maggior parte dei casi di tipo di riferimento, null è probabilmente abbastanza buono.

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