2009-05-29 13 views
10

Così mi hanno qualcosa di simileRestituzione tipi di stringhe nullable

public string? SessionValue(string key) 
{ 
    if (HttpContext.Current.Session[key].ToString() == null || HttpContext.Current.Session[key].ToString() == "") 
     return null; 

    return HttpContext.Current.Session[key].ToString(); 
} 

, che non può essere compilato.

Come restituire un tipo di stringa nullable?

risposta

30

La stringa è già un tipo nullable. Nullable può essere utilizzato solo su ValueTypes. La stringa è un tipo di riferimento.

Basta sbarazzarsi del "?" e dovresti essere bravo!

0

È possibile assegnare null a una stringa poiché è un tipo di riferimento, non è necessario essere in grado di renderlo nullable.

0

La stringa è già un tipo nullable. Non hai bisogno del '?'.

Errore 18 Il tipo 'stringa' deve essere un tipo valore non annullabile per usarlo come parametro 'T' nella tipo o metodo generico 'System.Nullable'

-1

string è già annullabile da solo.

4

Come è già stato detto, string non ha bisogno ? (che è una scorciatoia per Nullable<string>) perché tutti i tipi di riferimento (class es) sono già annullabile. Si applica solo al tipo di valore (struct s).

A parte questo, non è necessario chiamare ToString() sul valore della sessione prima di verificare se è null (oppure è possibile ottenere un NullReferenceException). Inoltre, non dovresti controllare il risultato di ToString() per null perché non dovrebbe mai restituire null (se correttamente implementato). E sei sicuro di voler restituire null se il valore della sessione è vuoto string ("")?

Questo è equivalente a quello che si intende scrivere:

public string SessionValue(string key) 
{ 
    if (HttpContext.Current.Session[key] == null) 
     return null; 

    string result = HttpContext.Current.Session[key].ToString(); 
    return (result == "") ? null : result; 
} 

Anche se vorrei scrivere in questo modo (tornare vuota string se è quello che il valore di sessione contiene):

public string SessionValue(string key) 
{ 
    object value = HttpContext.Current.Session[key]; 
    return (value == null) ? null : value.ToString(); 
} 
+0

"perché tutti i tipi di riferimento (classi) sono già annullabili. " -> Non sembra essere così. 'vector public class vector {public static vector func() {return null; }} 'genera un errore. – Assimilater

+0

Le interfacce sembrano essere annullabili sempre – Assimilater

+0

@Assimilater Ho appena provato il tuo codice. Ha compilato e funzionato bene per me. 'vector' è una classe, quindi' func() 'può sicuramente restituire' null'. – Lucas

Problemi correlati