質問

次の例のような同様のコードを常に書いていることに気付きます:

if (object["Object Name"] != null) {
    if (object["Object Name"] == "Some Value") {
        // Do Statement A
    } else {
        // Do Statement B
    }
} else {
    // Do Statement B
}

ここでの問題は、オブジェクトがnullであるかどうかを確認し、実際の内容を確認できることです。

" Statement B"常に同じで、私の場合は通常SQLステートメントです。

これを回避するより良い方法が必要ですか?

ありがとう
スティーブン

役に立ちましたか?

解決

C#には短絡があるため、次のことができます。

if(null != object && object.name == foo)
  do A
else
  do B

C#は常に条件文の最初の式を最初に評価し、それが失敗した場合、文のその部分で他のことは試行しません。

この点をさらに進めるために、1つ以上の安価な操作と一緒に条件ステートメントで高価な操作を行う場合、可能であれば最後に配置することをお勧めします。本当に必要です。

if(trivial comparison && trivial comparison && REALLY EXPENSIVE OPERATION)

最後の手段として、高価な操作のみを実行するようになりました。

他のヒント

C#は短絡を行うため、はい。これを試してください:

if (object["Object Name"] != null && object["Object Name"] == "Some Value") 
{
    // Do Statement A
} 
else 
{
    // Do Statement B
}

if-then-elseをこれに書き換えると、単一のBステートメントがあるため、見栄えが良くなると思います。

if ((object["Object Name"] != null) && (object["Object Name"] == "Some Value")) 
{
    // Do Statement A
} 
else 
{
    // Do Statement B
}

ダブルチェックを行う理由きっとこれで十分でしょう:

if(object["Object Name"] == "Some Value") {
    // Do statement A
} else {
    // Do statement B
}

nullチェックで何が得られるかはわかりますが、指定する特定の例では必要ありません。

編集:代わりに this と書いた場合:

if (object != null) {
    if (object["Object Name"] == "Some Value") {
        // Do Statement A
    } else {
        // Do Statement B
    }
} else {
    // Do Statement B
}

その場合の解決策は次のとおりです。

if(object != null && object["Object Name"] == "Some Value") {
    // Do Statement A
} else {
    // Do Statement B
}

免責事項:一般的な短絡法を行っていません。

さて、特にクエリが同じ場合は、ルックアップを実行する別の関数を作成できます。そのため、次のようになります:(疑似コード着信)

private bool IsNullCheck(string objectName)
{
  if (object["Object Name"] != null)
     return false;
  else
     // statement B
}

if (!IsNullCheck("Object Name") && if(object["Object name"] == "Value") {
   // stuffs

} 
else 
{
        // Do Statement B
}

など。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top