如何处理空字符串?

时间:2012-12-21 00:32:18

标签: c# asp.net .net

说我有以下代码:

Request.QueryString["ids"].Split('|');

如果查询字符串中不存在ids,则会引发异常。是否有一种普遍接受的方式来处理这种情况。我认为以下所有选项都可以避免错误,但我想知道一个(或完全不同的方法)是否被普遍接受为更好。

string[] ids = (Request.QueryString["ids"] ?? "").Split('|'); 

string[] ids;
if(!String.IsNullOrEmpty(Request.QueryString["ids"]))
{
   ids = Request.QueryString["ids"].Split('|')
}

?

我认为所有这些都有效,但它们看起来有些难看。有更好的方式吗?

*更好=更容易阅读,更快,更有效或全部以上。

3 个答案:

答案 0 :(得分:10)

我喜欢使用扩展方法:

public static string EmptyIfNull(this string self)
{
    return self ?? "";
}

用法:

string[] ids = Request.QueryString["ids"].EmptyIfNull().Split('|');

答案 1 :(得分:1)

我个人使用

string idStr = Request.QueryString["ids"];
ids = idStr == null ? new string[0] : idStr.Split("|");

答案 2 :(得分:0)

string[] ids = (Request.QueryString["ids"] as string).Split('|');

这将以与Request.QueryString["ids"]

相同的方式失败
string[] ids;
if(!String.IsNullOrEmpty(Request.QueryString["ids"]))
{
   ids = Request.QueryString["ids"].Split('|')
}

较重且可能会将数据检索逻辑调用两次(并且您可能会因错误而导致两次副作用)=>使用临时存储数据但更重。

string[] ids = (Request.QueryString["ids"] ?? "").Split('|'); 

定义最简单,最干净,最有效的方法,因为编译器会生成一个临时的。

如果您在很多时候遇到这种处理,您可以使用一系列流畅的名称和行为来构建自己的管道库。