4

假设我有以下代码:

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

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

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

或者

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

或者

?

我认为所有这些都会起作用,但它们看起来有点难看。有没有更好的办法?

*更好 = 更容易阅读、更快、更高效或以上所有。

4

3 回答 3

12

我喜欢为此使用扩展方法:

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

用法:

string[] ids = Request.QueryString["ids"].EmptyIfNull().Split('|');
于 2012-12-21T00:39:54.083 回答
1

我个人会使用

string idStr = Request.QueryString["ids"];
ids = idStr == null ? new string[0] : idStr.Split("|");
于 2012-12-21T00:39:46.273 回答
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('|'); 

绝对是最简单、最干净和更有效的方式,因为编译器会自己生成一个临时文件。

如果您经常遇到这种处理,您可以使用一堆具有流畅名称和行为的方法来构建自己的管道库。

于 2012-12-21T00:39:03.743 回答