说我有以下代码:
Request.QueryString["ids"].Split('|');
如果查询字符串中不存在ids
,则会引发异常。是否有一种普遍接受的方式来处理这种情况。我认为以下所有选项都可以避免错误,但我想知道一个(或完全不同的方法)是否被普遍接受为更好。
string[] ids = (Request.QueryString["ids"] ?? "").Split('|');
或
string[] ids;
if(!String.IsNullOrEmpty(Request.QueryString["ids"]))
{
ids = Request.QueryString["ids"].Split('|')
}
或
?
我认为所有这些都有效,但它们看起来有些难看。有更好的方式吗?
*更好=更容易阅读,更快,更有效或全部以上。
答案 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('|');
定义最简单,最干净,最有效的方法,因为编译器会生成一个临时的。
如果您在很多时候遇到这种处理,您可以使用一系列流畅的名称和行为来构建自己的管道库。