4

此代码抛出一个NullReferenceExceptionifmode页面查询字符串中未指定:

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

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

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

这是标准做法,还是黑客行为?

4

5 回答 5

7

您可以使用空合并运算符

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签名。我不确定这是否是一个好名字(我认为不是)。

于 2013-07-18T14:51:32.420 回答
4

好吧,我会推荐这个:

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

实际上,这就是您的代码编译成的内容(靠近底部,但它是一本很好的书,所以我会全部阅读)。你的做法很好,但这更清楚一点。

于 2013-07-18T14:52:10.317 回答
2

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

bool isAdvancedMode = (Request.QueryString["mode"] ?? String.Empty).Equals("advanced");
于 2013-07-18T14:51:34.300 回答
0

不同的方法,虽然代码多一点,但我认为意图更清楚。

bool isAdvancedMode = String.IsNullOrWhitespace(Request.QueryString["mode"]) ? 
                        false : Request.QueryString["mode"].Equals("advanced")
于 2013-07-18T14:53:21.023 回答
0

那这个呢

bool isAdvancedMode=(Request.QueryString["mode"] ?? string.Empty).Equals("advanced");
于 2013-07-18T14:54:35.217 回答