返回可以为空的字符串类型

时间:2009-05-29 22:20:40

标签: c# string 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();
}

无法编译。

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

5 个答案:

答案 0 :(得分:35)

String已经是可以为空的类型。 Nullable只能用于ValueTypes。 String是引用类型。

摆脱“?”你应该好好去!

答案 1 :(得分:4)

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

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

这相当于你的意思:

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

答案 2 :(得分:0)

您可以为字符串赋值null,因为它是引用类型,您不需要能够使其为空。

答案 3 :(得分:0)

String已经是可以为空的类型。你不需要'?'。

  

错误18类型'string'必须是a   不可为空的值类型以便   在通用中将它用作参数'T'   类型或方法'System.Nullable'

答案 4 :(得分:-1)

string已经可以自己为空了。