此代码抛出一个NullReferenceException
ifmode
页面查询字符串中未指定:
bool isAdvancedMode = Request.QueryString["mode"].Equals("advanced");
这就是我解决这个问题的方法:
bool isAdvancedMode = (Request.QueryString["mode"] + "").Equals("advanced");
这是标准做法,还是黑客行为?
此代码抛出一个NullReferenceException
ifmode
页面查询字符串中未指定:
bool isAdvancedMode = Request.QueryString["mode"].Equals("advanced");
这就是我解决这个问题的方法:
bool isAdvancedMode = (Request.QueryString["mode"] + "").Equals("advanced");
这是标准做法,还是黑客行为?
您可以使用空合并运算符:
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
签名。我不确定这是否是一个好名字(我认为不是)。
好吧,我会推荐这个:
bool isAdvancedMode = (Request.QueryString["mode"] ?? "").Equals("advanced");
实际上,这就是您的代码编译成的内容(靠近底部,但它是一本很好的书,所以我会全部阅读)。你的做法很好,但这更清楚一点。
为什么不使用空合并运算符?
bool isAdvancedMode = (Request.QueryString["mode"] ?? String.Empty).Equals("advanced");
不同的方法,虽然代码多一点,但我认为意图更清楚。
bool isAdvancedMode = String.IsNullOrWhitespace(Request.QueryString["mode"]) ?
false : Request.QueryString["mode"].Equals("advanced")
那这个呢
bool isAdvancedMode=(Request.QueryString["mode"] ?? string.Empty).Equals("advanced");