2012-03-22 47 views
1

是否有可能將此if語句轉換爲單行語句?Tricky 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 2012-03-22 10:51:28

+0

@Oded:沒錯,沒有想到這一點。儘管如此,我會保留它(帶有有用的評論),因爲它更容易看到我所做的事情。 – 2012-03-22 11:03:11

2

使用邏輯OR:

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

我會繼續爲了清楚而以新行另外,雖然對於這樣一個簡單的聲明你可能沒事砸花括號。如果你試圖在將來添加更多的邏輯,但你需要小心,但顯然在if的分支中。

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

我編輯了你的代碼,因爲你可能意味着否定表達式(因爲它不會工作) – jgauffin 2012-03-22 11:07:01

+0

非常感謝:) – ABH 2012-03-22 11:09:56

0

如果您編輯以包括爲什麼使它成爲單行將幫助您得到更合適的答案。以下是你可以採取幾種不同的方法..

首先,在一個單一的線,你要求:

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); 
    } 
} 

,並簡單地調用它的每您遇到的單元格值。