根据其他值逻辑

时间:2016-09-12 14:11:54

标签: c# logic

如何更有效地检查空值并相应地设置其顺序?

我有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栏等的检查。

2 个答案:

答案 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)