如果未在页面查询字符串中指定NullReferenceException
,则此代码会抛出mode
:
bool isAdvancedMode = Request.QueryString["mode"].Equals("advanced");
这是我解决这个问题的方法:
bool isAdvancedMode = (Request.QueryString["mode"] + "").Equals("advanced");
这是标准练习还是黑客攻击?
答案 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");