2010-05-19 12 views
11

Cosa ? significa:Tipo di variabile che termina con?

public bool? Verbose { get; set; } 

Quando viene applicato a string?, c'è un errore:

The type 'string' must be a non-nullable value type in order to use it as parameter 'T' in the generic type or method 'System.Nullable'

+3

Solo per aggiungere alle altre risposte che descrivono i tipi nullable: un bool è memorizzato in memoria come 0 o 1, non c'è altra opzione. Rendendolo un tipo nullable alloca un'area di memoria più ampia in cui il suo valore può essere true, false o null. Noterai che ora puoi fare cose come Verbose.HasValue che non potresti fare se è stato definito un bool. –

+0

Anche per aggiungere alla conversazione generale, tutti i tipi di riferimento sono annullabili per impostazione predefinita (I.E. puoi impostarli tutti su null), quindi il tipo Nullable è progettato per non accettarli, poiché duplicherebbe funzionalità e complicherebbe le cose. – Rangoric

+1

possibile duplicato di [Che cosa significa "DateTime?" significa in C#?] (http://stackoverflow.com/questions/109859/what-does-datetime-mean-in-c) –

risposta

18

? rende il vostro (valore) tipi non-Nullable Nullable. Non funziona per string, in quanto è un tipo di riferimento e quindi annullabile per impostazione predefinita.

Da MSDN, sui tipi di valore:

Unlike reference types, a value type cannot contain the null value. However, the nullable types feature does allow for values types to be assigned to null.

? è fondamentalmente una scorciatoia per Nullable<T> structure.

Se si desidera saperne di più, MSDN ha un great article per quanto riguarda questo argomento.

7

bool? è un modulo breve per System.Nullable<bool>. Sono accettati solo tipi di valore per il parametro type e non per i tipi di riferimento (ad esempio, per esempio stringa).

5

bool? è una notazione abbreviata per Nullable<bool>. In generale, the documentation afferma:

The syntax T? is shorthand for Nullable, where T is a value type. The two forms are interchangeable

Dal string non è un value type (è un reference type), non è possibile utilizzare come parametro generico per Nullable<T>.

11

Il ? è una scorciatoia per la struct di seguito:

struct Nullable<T> 
{ 
    public bool HasValue; 
    public T Value; 
} 

È possibile utilizzare questa struct direttamente, ma il ? è la sintassi di scelta rapida per rendere il codice risultante molto più pulito. Piuttosto che digitare:

Nullable<int> x = new Nullable<int>(125); 

Invece, è possibile scrivere:

int? x = 125; 

Questo non funziona con lo spago, come una stringa è un tipo di riferimento e non un tipo di valore.

3

Il? l'operatore indica che la proprietà è in realtà un tipo nullable.

public bool? Verbose { get; set; } 

è equilvalent a

public Nullable<bool> Verbose { get; set; } 

Un tipo nullable è un tipo speciale introdotta in C# 2.0 che accetta un tipo di valore come un tipo praramater generico e consente i null da assegnare al tipo.

Il tipo nullable accetta solo tipi di valore come argomenti generici, motivo per cui viene visualizzato un errore di compilazione quando si tenta di utilizzare il? operatore in combinazione con il tipo di stringa.

Per maggiori informazioni: MSDN Nullable Types

3

tipi unico valore possono essere dichiarate come Nullable. I tipi di riferimento sono nulli di default. Quindi non puoi creare una stringa nullable poiché la stringa è un tipo di riferimento.

3

la ? significa che il vostro tipo di valore può avere un valore nullo, specialmente nel caso di database di

movimentazione avete bisogno di questi nullables per controllare se qualche valore è nullo o meno.

Può essere applicato solo ai tipi di valori che i tipi di riferimento di coz possono essere nulli.

Problemi correlati