C# 这个代码块可以缩短吗?

C# 这个代码块可以缩短吗?,c#,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;

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

三元运算符是缩短此表达式的选项:

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。通常情况下,您会向用户报告输入错误。

为了避免重复并保持可读性,您可以这样做

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

同意,我会留下评论,但没有平庸的样品@亨克奥尔特曼