2009-05-29 124 views
10

所以我有这样的事情返回可空字符串类型

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

不编译。

如何返回可为空的字符串类型?

回答

30

字符串已经是可以空的类型。可空值只能在ValueTypes上使用。字符串是一个引用类型。

刚刚摆脱“?”你应该很好走!

0

您可以将null分配给一个字符串,因为它的引用类型不需要可以为空。

0

字符串已经是可以空的类型。你不需要'?'。

错误18的类型“字符串”必须是顺序 非空值类型来 在通用 类型或方法使用它作为参数“T”“System.Nullable”

-1

string已经可以自行空了。

4

正如其他人所说的,string不需要?(这是Nullable<string>的快捷键),因为所有的参考类型(class es)都是可以为空的。它仅适用于值类型(struct s)。

除此之外,在检查是否为null(或者您可以获得NullReferenceException)之前,您不应该在会话值上调用ToString()。此外,您不必检查ToString()的结果null,因为它永远不会返回null(如果正确实施)。如果会话值为空string""),您确定要返回null吗?

这相当于你的意思写:

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

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

虽然我会写这样的(空车返回string如果这就是会话值包含):

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

“,因为所有的引用类型(类)已经可以为空。“ - >看起来并不如此。 `public class vector {public static vector func(){return null; }}`导致错误。 – Assimilater 2016-07-26 09:47:05