如果其他情况下更高效
本文关键字:高效 情况下 其他 如果 | 更新日期: 2023-09-27 17:52:13
是否有更精简/更有效的方法来写出这个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
您可以完全摆脱if
。
DBNull.Value.ToString()
返回一个空字符串。
您可以进行
lblOldNumber.Text = dr["OLD_NUMBER"] != DBNull.Value ? dr["OLD_NUMBER"].ToString() : string.Empty;
上面的语句需要更少的行,看起来更易读。
您可以使用以下内容:
lblOldNumber.Text = dr["OLD_NUMBER"] != DBNull.Value ? dr["OLD_NUMBER"].ToString() : string.Empty;
有关的更多信息?:运算符而不是if,可以在这里找到:(C#参考(
根据经验,当您看到这种重复时,请编写一个函数来进行处理。
string FormatIt(object value)
{
return value.ToString(); // or whatever the logic is like
}
然后:
lblOldNumber.Text = FormatIt(dr["OLD_NUMBER"]);
因此,如果你必须修改你的代码来格式化money或类似的smth,你有一个地方可以更改。
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);
类似这样的东西:
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();
}
查询数据库时,可以从数据集中删除空值。
var result = (context.MyTable.Where(c => c.OLD_NUMBER != null));
我可能会写一个方法:
void TextOrNull(object item, Label lbl)
{
lbl.Text = item != DBNull.Value ? item.ToString() : String.Empty;
}
并称之为:
TextOrNull(dr["OLD_NUMBER"], lblOldNumber);
我会制作一个包含这个的方法,比如:
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 );
我还没有尝试过这么多,但DataRow
类上有一个ItemArray
,它将返回DataRow
中项目的对象数组。可以通过这种方式设置循环和测试值,而不是硬编码键的名称。
再次不确定这是否可行,因为我的电脑上没有设置测试场景,但像这样?
foreach (var col in dataRow.ItemArray)
{
if(DBNull.Value != col)
lbl.Text = col.ToString()
}