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

本文关键字:语句 数组 条件 创建 是否 | 更新日期: 2023-09-27 18:32:00

我正在使用 excel 调用制作条件语句,我想知道是否有办法让我的程序检查它循环通过的条件数组,而不是一堆"or"语句。 我的代码如下:

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"调用,但我不确定如何实现它以实现我的目的。 谢谢。

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

你可以反转逻辑并使用Contains

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

但是,如果您使用的是 Office 互操作,我会注意到Range[]Text都是 COM 调用,速度很慢。 通过不为每个字符串比较调用它们,而是与 while 循环中的常量进行比较,您可能会看到显着的改进:

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

您可以使用 Linq 将代码转换为数据,您可以像数组一样循环访问和测试 - 如下所示:

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 发布的解决方案相同,但允许您遍历一系列范围,我认为这是您要做的。