4

このコードは、ページのクエリ文字列で指定されていないNullReferenceException場合にスローします。mode

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

これは私がこれを回避する方法です:

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

これは標準的な慣行ですか、それともハックですか?

4

5 に答える 5

7

null 合体演算子を使用できます。

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

null合体演算子を使用しないのはなぜですか?

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 に答える