2009-05-29 6 views
10

J'ai donc quelque chose comme çatypes de chaîne de retour nullables

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(); 
} 

qui ne compile pas.

Comment renvoyer un type de chaîne Nullable?

Répondre

30

La chaîne est déjà un type Nullable. Nullable ne peut être utilisé que sur ValueTypes. String est un type de référence.

Il suffit de se débarrasser du "?" et vous devriez être bon à aller!

0

Vous pouvez affecter une valeur nulle à une chaîne étant donné que c'est un type de référence, vous n'avez pas besoin de pouvoir le rendre nul.

0

La chaîne est déjà un type Nullable. Vous n'avez pas besoin du '?'

Erreur 18 Le type « chaîne » doit être un type de valeur non nulle afin de utiliser comme paramètre « T » dans le type générique ou méthode « System.Nullable »

-1

string est déjà nullable par lui-même.

4

Comme tout le monde a dit, string n'a pas besoin ? (ce qui est un raccourci pour Nullable<string>) car tous les types de référence (class de es) sont déjà annulable. Elle s'applique uniquement au type de valeur (struct s). En dehors de cela, vous ne devez pas appeler ToString() sur la valeur de session avant de vérifier si c'est null (ou vous pouvez obtenir un NullReferenceException). En outre, vous ne devriez pas avoir à vérifier le résultat de ToString() pour null car il ne devrait jamais retourner null (s'il est correctement implémenté). Et êtes-vous sûr de vouloir retourner null si la valeur de la session est vide string ("")?

Cela équivaut à ce que vous vouliez écrire:

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

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

Bien que je voudrais écrire comme ça (retour à vide string si c'est ce que la valeur de session contient):

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

« parce que tous les types de référence (classes) sont déjà nullables. " -> Ne semble pas être ainsi. 'public class vector {public static vecteur func() {return null; }} 'entraîne une erreur. – Assimilater

+0

Les interfaces semblent être toujours nulles – Assimilater

+0

@Assimilater J'ai juste essayé votre code. Il a compilé et s'est très bien passé pour moi. 'vector' est une classe, donc' func() 'peut certainement retourner' null'. – Lucas

Questions connexes