2012-03-22 7 views
1

このif文を1行の文に変換できますか?トリッキーなif文

 if (value != DBNull.Value) 
     { 
      dic.Add(columnName); 
     } 
     else if (!skipNullValues) 
     { 
      dic.Add(columnName);  
     } 

答えて

8
if (value != DBNull.Value || !skipNullValues) dic.Add(columnName); 
+0

'if'節は'!(value == DBNull.Value && skipNullValues) 'のように書き直すことができます。 – Oded

+0

@Oded:そうだとは思いませんでした。私は何をしたのか分かりやすいので、(あなたの有益なコメントで)それをそのままにしておきます。 –

2

使用論理和(OR):このような単純な文のあなたはカーリーをドロップする、おそらく大丈夫だが、私は、明確にするための新しい行に追加し続けるだろう

if (value != DBNull.Value || !skipNullValues) 
    dic.Add(columnName); 

角かっこ。明らかに、ifの支店でも、今後ロジックを追加しようとすると注意が必要です。

1
if (!(value == DBNull.Value && skipNullValues)) 
    dic.Add(columnName); 
+0

あなたはおそらく式を否定することを意図していたので、あなたのコードを編集しました(そうでなければ動作しないので) – jgauffin

+0

ありがとう:) – ABH

0

なぜそれを1行にするのかを含めるように編集すると、より適切な回答が得られる場合があります。

if ((value != DBNull.Value) || (value == DBNull.Value && !skipNullValues)) { dic.Add(columnName); } 

を別の方法として、あなたはよりコンパクトなものが必要な場合は、三項演算子を使用してに見たいと思うかもしれません:ここではあなたが要求したとして、あなたが一行に..

ファーストを脱ぐことができ、いくつかの異なるアプローチがあります。三項演算子の

var result = (istrue) ? (return valIfTrue) : (return valIfFalse); 

さらに詳しい情報: http://msdn.microsoft.com/en-us/library/ty67wk28%28v=vs.80%29.aspx

(状況に応じて)ほとんどの場合、あなたはこれに似た方法で作成することを検討すべきである:

public void AddColumnToDic(object value, string columnName) 
    bool skipNullValues = false; // todo: read from configuration 
    if ((value != DBNull.Value) || (value == DBNull.Value && !skipNullValues)) 
    { 
     dic.Add(columnName); 
    } 
} 

をし、単にすべてのためにそれを呼び出しますあなたが遭遇する細胞の価値。