2016-04-01 435 views
-4

我已經if語句在我的代碼下面,我想知道是否有一種方法可以縮短這個代碼塊可以縮短嗎?

if (ürün_kısakod.Text != "") 
{ 
    komut.Parameters.Add("@kısakod", SqlDbType.SmallInt, 5).Value = Int16.Parse(ürün_kısakod.Text); 
} 
else 
{ 
    komut.Parameters.Add("@kısakod", SqlDbType.SmallInt, 5).Value = DBNull.Value; 
} 

回答

6

三元運算符是縮短這個表達式的選項:

komut.Parameters.Add("@kısakod", SqlDbType.SmallInt, 5).Value = 
    !string.IsNullOrEmpty(ürün_kısakod.Text) 
    ? (object)Int16.Parse(ürün_kısakod.Text) 
    : DBNull.Value 
    ; 

更好的選擇是使用TryParse。通常你會向用戶報告輸入錯誤。

+0

同意,我將離開發表評論,但不用藥療程iocre樣品。 @HenkHolterman –

2

爲了避免重複,仍然是可讀的,你可以做

object val; 
if (String.IsNullOrEmpty(ürün_kısakod.Text)) { 
    val = Int16.Parse(ürün_kısakod.Text); 
} else { 
    val = DBNull.Value; 
} 

komut.Parameters.Add("@kısakod", SqlDbType.SmallInt, 5).Value = val; 

而且因爲你很可能會做類似的事情在其他地方,使它成爲一個功能(並使其通用的,如果你想太多基於整數寬度):

object ParseInt16OrDbNull(string text) { 
    if (String.IsNullOrEmpty(text)) { 
     return Int16.Parse(text); 
    } else { 
     return DBNull.Value; 
    } 
} 

並且代碼只是:

komut.Parameters.Add("@kısakod", SqlDbType.SmallInt, 5).Value = ParseInt16OrDbNull(ürün_kısakod.Text);