2016-04-01 257 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);