减少if语句本身

本文关键字:语句 if 减少 | 更新日期: 2023-09-27 17:54:45

这是我现在的if语句:

   if (excel_getValue("A" + i) == "" && 
    excel_getValue("A" + (i + 1)) == "" && 
    excel_getValue("A" + (i + 2)) == "" && 
    excel_getValue("A" + (i + 3)) == "" && 
    excel_getValue("A" + (i + 4)) == "" && 
    excel_getValue("A" + (i + 5)) == "" && 
    excel_getValue("A" + (i + 6)) == "" && 
    excel_getValue("A" + (i + 7)) == "" && 
    excel_getValue("A" + (i + 8)) == "")

有什么方法可以简化这个语句吗?我应该在for循环中构建这个if语句吗?

顺便说一句,这个if语句已经在forloop中了,它使用了forloop的第i位

减少if语句本身

您可以使用All:

if(Enumerable.Range(0, 9).All(c => excel_getValue("A" + (i + c)) == "")) {
}

有一个简单的方法来"减少"(至少"美化")与for循环…但这不会提高性能,所以您选择:

bool do = true;
for(var j = 0; j < 9; j++) { 
   if (excel_getValue("A" + (i+j)) != "") {
     do = false;
     break;
   }
}
if(do) { /* whatever */ }

或者使用Linq:

if(Enumerable.Range(0, 9).All(x => excel_getValue("A" + (i + x)) == "")) { /* whatever */ }

这可能很容易减少,但我想关键是它应该"更漂亮",而不是"更好"或"复杂"。就性能而言,没有什么能比得上你原来的那个:-)

是的,在这种情况下,for循环是简化代码的好方法。比如:

   bool result = true;
   for(int j = 0; j < max; j++)
   {
      result = result && excel_getValue("A" + (i + j)) == "";
   }

你可以尝试这样做:

if (Enumerable.Range(0, 8).All(p => excel_getValue("A" + (i + p)) == ""))