可以缩短此代码块吗?

时间:2016-04-01 09:56:38

标签: c#

我的代码中有以下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;
}

2 个答案:

答案 0 :(得分: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。通常您会向用户报告输入错误。

答案 1 :(得分: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);