Domanda

In C# ci sono i tipi primitivi nullable (ad es. bool?) sono solo alias per i loro corrispondenti Nullable<T> tipo o c'è differenza tra i due?

È stato utile?

Soluzione

Se guardi l'IL utilizzando Ildasmo, scoprirai che entrambi vengono compilati fino a Nullable<bool>.

Altri suggerimenti

Non c'è differenza tra bool? b = null E Nullable<bool> b = null.IL ? è solo lo zucchero della sintassi del compilatore C#.

Per accedere al valore del bool?devi fare quanto segue:

bool? myValue = true;
bool hasValue = false;

if (myValue.HasValue && myValue.Value)
{
  hasValue = true;
}

Nota che non puoi semplicemente fare:

if (myValue)
{
  hasValue = true;
}

Sono sorpreso che nessuno sia ancora andato alla fonte (le specifiche C#).Da §4.1.10 Tipi nullable:

Un tipo nullable viene scritto T?, dove T è il tipo sottostante.Questa sintassi è un'abbreviazione di System.Nullable<T> e le due forme possono essere utilizzate in modo intercambiabile.

Quindi no, non c'è alcuna differenza tra le due forme.(Supponendo che tu non abbia nessun altro tipo chiamato Nullable<T> in uno qualsiasi degli spazi dei nomi che utilizzi.)

UN Nullable<T> è una struttura composta da una T e un flag di bit che indica se la T è valida o meno.UN Nullable<bool> ha tre possibili valori:vero, falso e nullo.

Modificare: Ah, mi era sfuggito il fatto che il punto interrogativo dopo "bool" fosse in realtà parte del nome del tipo e non un indicatore del fatto che stavi facendo una domanda :).La risposta alla tua domanda, quindi, è "sì, il C# bool? è solo un alias per Nullable<bool>".

UN bool è un tipo valore, pertanto non può contenere un valore NULL.Se avvolgi qualsiasi tipo di valore con Nullable<>, gli darà quella capacità.Inoltre, i metodi di accesso al valore cambiano tramite proprietà aggiuntive HasValue E Value.

Ma alla domanda: Nullable<bool> E bool? sono alias.

No, non c'è differenza.In sintesi:

System.Boolean -> valori validi:vero falso

bool -> alias per System.Boolean

Nullable<bool> -> valori validi:vero, falso, nullo

bool?-> alias per Nullable<bool>

Spero che questo ti aiuti.

Le primitive nulle sono solo primitive regolari racchiuse in Nullable.Qualsiasi apparenza contraria è solo il compilatore e lo zucchero sintattico.

Nessuna differenza.Dai un'occhiata qui: http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx

"La sintassi T?è una scorciatoia per Nullable, dove T è un tipo di valore.Le due forme sono intercambiabili."

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