所以我有类似的东西
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();
}
无法编译。
如何返回可以为空的字符串类型?
答案 0 :(得分:35)
String已经是可以为空的类型。 Nullable只能用于ValueTypes。 String是引用类型。
摆脱“?”你应该好好去!
答案 1 :(得分:4)
正如其他人所说,string
不需要?
(这是Nullable<string>
的快捷方式),因为所有引用类型(class
es)已经可以为空。它仅适用于值类型(struct
s)。
除此之外,在检查是否为ToString()
(或者您可以获得null
)之前,不应在会话值上调用NullReferenceException
。此外,您不必检查ToString()
null
的结果,因为它永远不会返回null
(如果正确实施)。如果会话值为空null
(string
),您确定要返回""
吗?
这相当于你的意思:
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
已经可以自己为空了。