是否可能有更简洁/有效的方法来写出这个if / else语句?我不得不在这个数据库中的每个字段(接近200个字段)上检查null,并且到最后代码看起来会非常混乱。 :\
if (dr["OLD_NUMBER"] != DBNull.Value)
{
lblOldNumber.Text = dr["OLD_NUMBER"].ToString();
}
else
{
lblOldNumber.Text = string.Empty;
}
// A bunch more with different lbls and columns
答案 0 :(得分:12)
你可以完全摆脱if
。
DBNull.Value.ToString()
返回一个空字符串。
答案 1 :(得分:4)
你可以做到
lblOldNumber.Text = dr["OLD_NUMBER"] != DBNull.Value ? dr["OLD_NUMBER"].ToString() : string.Empty;
上述陈述需要更少的线条,看起来更具可读性。
答案 2 :(得分:1)
lblOldNumber.Text = string.Empty;
if (dr["OLD_NUMBER"] != DBNull.Value)
{
lblOldNumber.Text = dr["OLD_NUMBER"].ToString();
}
或者你可以使用
这样的功能void ApplyValue(Label label,object value, string defaultValue){
label.Text =defaultValue;
if (value != DBNull.Value)
{
label.Text = value.ToString();
}
}
并使用下一个代码
ApllyValue(lblOldNumber,dr["OLD_NUMBER"],string.Empty);
答案 3 :(得分:1)
您可以使用以下内容:
lblOldNumber.Text = dr["OLD_NUMBER"] != DBNull.Value ? dr["OLD_NUMBER"].ToString() : string.Empty;
有关?:运算符而非if的更多信息,可以找到here: (C# Reference)
答案 4 :(得分:1)
根据经验,当您看到这种重复时,请编写一个函数来进行处理。
string FormatIt(object value)
{
return value.ToString(); // or whatever the logic is like
}
然后:
lblOldNumber.Text = FormatIt(dr["OLD_NUMBER"]);
因此,如果您必须修改代码来格式化金钱或类似的东西,那么您需要一个来更改。
答案 5 :(得分:1)
这样的事情:
var labels = new Dictionary<string, YourLabelClass>
{
{"OLD_NUMBER", lblOldNumber},
//Add your 200 fields here
{"ANOTHER_NUMBER", lblAnotherNumber},
};
foreach (var label in labels)
{
label.Value.Text = dr[label.Key].ToString();
}
答案 6 :(得分:0)
在查询数据库时,可以从数据集中删除空值。
var result = (context.MyTable.Where(c => c.OLD_NUMBER != null));
答案 7 :(得分:0)
我可能会写一个方法:
void TextOrNull(object item, Label lbl)
{
lbl.Text = item != DBNull.Value ? item.ToString() : String.Empty;
}
并称之为:
TextOrNull(dr["OLD_NUMBER"], lblOldNumber);
答案 8 :(得分:0)
我会制作一个方法,例如:
private void setLabelText( IDataRecord dr, string columnName, Label label )
{
label.Text = string.Empty
if (dr[columnName] != DBNull.Value)
{
label.Text = dr[columnName].ToString();
}
}
然后只需使用适当的标签和记录名称等来调用它
setText( dr, "OLD_NUMBER", lblOldNumber );
答案 9 :(得分:0)
我没有尝试过这么多,但ItemArray
类上有一个DataRow
,它将返回DataRow
中项目的对象数组。可能能够设置一个循环并以这种方式测试值,而不是硬编码密钥的名称。
再次不确定这是否可行,因为我的PC上没有设置测试场景,但是这样吗?
foreach (var col in dataRow.ItemArray)
{
if(DBNull.Value != col)
lbl.Text = col.ToString()
}