【问题标题】:How to default null session values to blank strings in C#如何在 C# 中将空会话值默认为空白字符串
【发布时间】:2011-04-28 06:18:42
【问题描述】:

我习惯使用 VB.net 进行网络编程。

通常,我有类似的东西:

Dim s as string = Session("s")

我从网络会话中获得了s 的字符串值。如果网络会话中没有值,我会得到一个空白字符串。

但是,AFAIK,在 C# 中,我必须有类似下面的代码才能做同样的事情。

string s;
try { s = Session["s"].ToString(); }
catch { s = ""; }

有更简单的方法吗?

【问题讨论】:

  • 在 VB 中,如果您尝试检索不存在的会话变量,您将得到 Nothing。我的大部分会话检索代码如下所示: Dim s As String = Session("S") If Not String.IsNullOrEmpty(s) Then DoSomethingWithS(s) End If

标签: c# asp.net session session-variables


【解决方案1】:

这是一个快速的方法:

s = (string)Session["s"] ?? "";

这会将 Session["s"] 转换为字符串,如果它不为 null,则返回该值。如果为空,它将返回一个空字符串。 “a ?? b”表达式本质上与“a != null ? a:b”相同(?? 编译效率更高)

要记住的其他一点:您不应该将异常用于正常的应用程序逻辑。

【讨论】:

  • 简短,甜蜜。没有附加功能。我喜欢它。
  • 下面的语法可能更简洁:String Test = (Session["Test"] ?? String.Empty).ToString();
  • 它不是更干净,但如果 Session["Test"] 不是字符串会更安全(我认为这里不是这种情况)
  • 附带说明,我倾向于使用 String.Empty 而不是 ""。似乎更具可读性。
  • 没有任何好处。 "" 与 String.Empty 一样有效。另见stackoverflow.com/questions/151472/…
【解决方案2】:

因为字符串是引用类型,所以可以为空,所以可以通过string.IsNullOrEmpty(s)来检查空或空:

string s = string.IsNullOrEmpty((string)strObject) ? string.Empty : strObject.ToString();

否则(正如 Philippe Leybaert 所说)您可以使用 ??操作员。

【讨论】:

  • String 是一个引用类型,所以它总是可以为空的。您的代码甚至无法编译,因为 string? 的语法无效。
  • 你说得对 Philippe,string 是引用类型。我已经更改了我的代码以反映这样的想法。
【解决方案3】:

我几乎同意 Philippe,但它只有在会话中出现“s”时才有效,否则会出现 KeyNotFoundException。这段代码检查了它,但没有解决 Philippe 的 NULL 问题。

s= Session.ContainsKey("s")?Session["s"]:"";

所以要涵盖这两种可能性,它变得更加复杂:

s = Session.ContainsKey("s")?(Session["s"]??""):"";

它并没有真正让它变得更容易,但性能应该比捕获异常更好。

【讨论】:

  • 我不相信它会引发任何此类异常。文档(msdn.microsoft.com/en-us/library/f0yd7k72.aspx)写道:“集合中具有指定名称的值。如果找不到指定的键,则尝试获取它会返回 null,并尝试设置它会使用指定的键创建一个新元素。 "
  • 确实,如果没有找到key,Session会返回null。它不会抛出异常
  • 是的 - 在原始问题中,引发异常的是 .ToString() 调用。
猜你喜欢
  • 1970-01-01
  • 2011-04-09
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多