是否可以创建条件语句数组?

时间:2016-01-26 14:44:57

标签: c# excel

我正在使用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文件的每一行都可以强制通过?我似乎无法弄清楚,还没有找到任何答案或例子。我想我可以使用'foreach'电话,但我不确定如何为我的目的实现它。感谢。

3 个答案:

答案 0 :(得分:5)

您可以撤消逻辑并使用{​​{1}}:

Contains

但是,如果您正在使用Office Interop,我会注意到var strings = new[] {"sting 1", "string 2", "string 3"}; while(!strings.Contains(activesheet.Range["A" + n].Text)) { } Range[]都是COM调用,这些调用很慢。通过不为每个字符串比较调用它们,而是与while循环中的常量进行比较,您可能会看到显着的改进:

Text

答案 1 :(得分:4)

您可以使用Linq将代码转换为可以迭代的数据并像数组一样进行测试 - 如下所示:

List<Func<bool>> stepsList = new List<Func<bool>>
        {
            Condition1,
            Condition2,
            ...
        };

stepsList.TrueForAll(f => f());

答案 2 :(得分:1)

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已发布的解决方案相同,但允许您遍历我认为您尝试做的范围集合。