是否可以创build一个条件语句数组?

我用excel调用条件语句,我想知道是否有办法让我的程序检查一个循环的条件数组,而不是一堆“或”语句。 我的代码如下:

while( activesheet.Range["A" + n].Text != "sting 1" || activesheet.Range["A" + n].Text != "string 2" || activesheet.Range["A" + n].Text != "string 3"...) { n++; } 

是否有可能有一系列的条件,我的Excel文件的每一行都可以被迫通过? 我似乎无法弄清楚,还没有find任何答案或例子。 我想我可以使用“foreach”调用,但我不知道如何执行它为我的目的。 谢谢。

您可以反转逻辑并使用Contains

 var strings = new[] {"sting 1", "string 2", "string 3"}; while(!strings.Contains(activesheet.Range["A" + n].Text)) { } 

但是,如果您使用的是Office Interop,我会注意到Range[]Text都是COM调用,它们很慢。 您可能会看到显着的改进,因为不会为每个string比较调用它们,而是在while循环中与一个常量进行比较:

 while(true) { var value = activesheet.Range["A" + n].Text; // one COM call instead of multiple if (strings.Contains(value)) break; } 

你可以使用Linq把你的代码转换成你可以迭代的数据,并像数组一样testing – 例如:

 List<Func<bool>> stepsList = new List<Func<bool>> { Condition1, Condition2, ... }; stepsList.TrueForAll(f => f()); 
 var conditions = new List<Func<Range, bool>>(); foreach (Range r in allMyXlsRanges) { while (conditions.TrueForAll(c => c(r))) { //whatever } } 

有了这个设置,你只需要初始化你的条件一次:

  conditions.Add(r => r.Text != "string 1"); conditions.Add(r => r.Text != "string 2"); //etc. 

这与auburg发布的解决scheme基本相同,但允许您遍历一系列范围,这是我认为您正在尝试做的。