質問
次の例のような同様のコードを常に書いていることに気付きます:
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
}
など。
所属していません StackOverflow