我写了一个如下所示的条件语句。本声明的目的是根据另一组条件检查一组条件。
如下所示:
else if ((Convert.ToString(dRow[UtilityEntity.FranceColumnGS]) == "x" ||
Convert.ToString(dRow[UtilityEntity.FranceColumnHQ]) == "x" ||
Convert.ToString(dRow[UtilityEntity.FranceColumnIO]) == "x" ||
Convert.ToString(dRow[UtilityEntity.FranceColumnJM]) == "x") &&
(Convert.ToString(dRow[UtilityEntity.FranceColumnHB]) == "x" ||
Convert.ToString(dRow[UtilityEntity.FranceColumnHZ]) == "x" ||
Convert.ToString(dRow[UtilityEntity.FranceColumnIX]) == "x" ||
Convert.ToString(dRow[UtilityEntity.FranceColumnJV]) == "x"))
{
excelWorksheet.Cells["AV" + rowIndex].Value = "both";
}
目前有效,但我确信这可以降低效率。
任何人都可以建议或提供一些暗示如何缩短此声明。
答案 0 :(得分:4)
作为样本如何完成:
var firstConditionColumns = new[] {
UtilityEntity.FranceColumnGS,
UtilityEntity.FranceColumnHQ,
UtilityEntity.FranceColumnIO,
UtilityEntity.FranceColumn.JM };
var secondConditionColumns = new[] {
UtilityEntity.FranceColumnHB,
UtilityEntity.FranceColumnHZ,
UtilityEntity.FranceColumnIX,
UtilityEntity.FranceColumnJV };
if (firstConditionColumns.Any(o => Convert.ToString(dRow[o]) == "x") &&
secondConditionColumns.Any(o => Convert.ToString(dRow[o]) == "x"))
{
excelWorksheet.Cells["AV" + rowIndex].Value = "both";
}
答案 1 :(得分:1)
它足够有效。您正在使用使用延迟评估的||
和&&
,因此只要知道结果,就不会再评估其余表达式。
尽管如此,它可以更具可读性和更少打字。
if (isX(UtilityEntity.FranceColumnGS) || isX(UtilityEntity.FranceColumnHQ) ...)
{
...
}
private bool isX(int index)
{
return (Convert.ToString(dRow[index]) == "x");
}
答案 2 :(得分:0)
您可以为dbRow创建扩展方法。我不确定你的例子中是什么类,但作为一个例子我假设它是DbRow:
public static class DbRowExtension
{
public static bool AnyColIsChecked(this DbRow source, string[] colNames)
{
return colNames.Any(x => source[x] == "X");
}
}
然后您可以像这样编写if语句
if (dbRow.AnyColIsChecked(UtilityEntity.FranceColumnGS,
UtilityEntity.FranceColumnHQ,
UtilityEntity.FranceColumnIO,
UtilityEntity.FranceColumn.JM) &&
dbRow.AnyColIsChecked(UtilityEntity.FranceColumnHB,
UtilityEntity.FranceColumnHZ,
UtilityEntity.FranceColumnIX,
UtilityEntity.FranceColumnJ))
{
...
}