在Request.QueryString中避免NullReferenceException

时间:2013-07-18 14:49:18

标签: c# asp.net query-string nullreferenceexception

如果未在页面查询字符串中指定NullReferenceException,则此代码会抛出mode

bool isAdvancedMode = Request.QueryString["mode"].Equals("advanced");

这是我解决这个问题的方法:

bool isAdvancedMode = (Request.QueryString["mode"] + "").Equals("advanced");

这是标准练习还是黑客攻击?

5 个答案:

答案 0 :(得分:7)

您可以使用null-coalescing operator

bool isAdvancedMode = (Request.QueryString["mode"] ?? String.Empty).Equals("advanced");

修改:如果您想重新使用此逻辑,请尝试以下扩展方法:

public static bool EqualIfExists(this string source, string comparison)
{
    return source != null && source.Equals(comparison);
}

Request.QueryString["mode"].EqualIfExists("advanced")

添加更多覆盖以匹配Equals签名。我不确定这是不是一个好名字(我认为不是)。

答案 1 :(得分:4)

好吧,我建议改为:

bool isAdvancedMode = (Request.QueryString["mode"] ?? "").Equals("advanced");

事实上,这就是your code compiles to(更接近底部,但这是一个很好的阅读,所以我读完了所有内容)。你的好习惯,但这更清楚。

答案 2 :(得分:2)

为什么不使用空合并运算符?

bool isAdvancedMode = (Request.QueryString["mode"] ?? String.Empty).Equals("advanced");

答案 3 :(得分:0)

不同的方法,虽然更多的代码,我认为更明确的意图。

bool isAdvancedMode = String.IsNullOrWhitespace(Request.QueryString["mode"]) ? 
                        false : Request.QueryString["mode"].Equals("advanced")

答案 4 :(得分:0)

这个怎么样

bool isAdvancedMode=(Request.QueryString["mode"] ?? string.Empty).Equals("advanced");