我习惯使用VB.net进行网页编程。
通常,我有类似的东西:
Dim s as string = Session("s")
我从网络会话中获取s
的字符串值。如果网络会话中没有值,我会得到一个空白字符串。
然而,AFAIK,在C#中,我必须有类似下面代码的东西来做同样的事情。
string s;
try { s = Session["s"].ToString(); }
catch { s = ""; }
有更简单的方法吗?
答案 0 :(得分:15)
这是一种快速的方法:
s = (string)Session["s"] ?? "";
这会将 Session [“s”] 强制转换为字符串,如果不为null,则返回该值。如果为null,则返回空字符串。 “a ?? b
”表达式与“a != null ? a:b
”基本相同(但 ?? 更有效地编译)
要记住的其他事项:您不应该对正常的应用程序逻辑使用异常。
答案 1 :(得分:0)
因为string是引用类型,所以可以为空,所以你可以通过 string.IsNullOrEmpty(s)检查空或null:
string s = string.IsNullOrEmpty((string)strObject) ? string.Empty : strObject.ToString();
否则(如 Philippe Leybaert 所说)你可以使用??运营商。
答案 2 :(得分:-3)
我几乎同意Philippe,但只有在会话中出现“s”时才有效,否则会出现KeyNotFoundException。此代码检查它,但不解决Philippe的NULL问题。
s= Session.ContainsKey("s")?Session["s"]:"";
因此,为了涵盖这两种可能性,它变得复杂:
s = Session.ContainsKey("s")?(Session["s"]??""):"";
它并没有真正使它变得更容易,但性能应该比捕获异常更好。