如何更有效地检查空值并相应地设置其顺序?
我有3个字段(1,2,3),我需要检查是否有任何字符串值为空,如果是,我需要将相应的值移动到下一个位置,如果2是null但不是3我不需要将3移到2点。
我最初的想法是用一系列if语句来做这件事,但是在开始这条道路之后,我知道我的if语句列表会很大,所以我正在寻找更好的方法预先形成此检查并设置我的值。
if (string.IsNullOrEmpty(field1))
{
fields.SetField("Field1", field1);
fields.SetField("Field2", field2);
}
如果我继续按照上述路线行驶,我还必须为每个初步检查执行第2和第3栏等的检查。
答案 0 :(得分:1)
也许你可以使用这个逻辑:
string firstNotNull = field1 ?? field2 ?? field3;
if (string.IsNullOrEmpty(field1)) fields.SetField("Field1", firstNotNull);
if (string.IsNullOrEmpty(field2)) fields.SetField("Field2", firstNotNull);
if (string.IsNullOrEmpty(field3)) fields.SetField("Field3", firstNotNull);
但逻辑并不完全清楚。如果Field3
为空且Field1
为空,您是否还要使用Field3
的值覆盖Field1
?
也许这种通用方法是您正在寻找的:
var stringColumns = table.Columns.Cast<DataColumn>().Where(c => c.DataType == typeof(string)).ToList();
foreach (DataRow row in table.Rows)
{
for (int i = 0; i < stringColumns.Count; i++)
{
string field = row.Field<string>(i);
if (string.IsNullOrEmpty(field))
{
// check all after this:
for (int ii = i + 1; ii < stringColumns.Count; ii++)
{
string nextField = row.Field<string>(ii);
if (!string.IsNullOrEmpty(nextField))
{
row.SetField(i, nextField);
break;
}
}
}
}
}
答案 1 :(得分:0)
如果&#39;字段&#39;是一个IEnumerable字符串集合,你可以简单地调用它上面的Orderby()/ OrderByDescending()方法。
var sortedFields = fields.OrderBy(s => s);
// OR
var sortedFields = fields.OrderByDescending(s => s)