是否可以创建条件语句数组
本文关键字:语句 数组 条件 创建 是否 | 更新日期: 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 发布的解决方案相同,但允许您遍历一系列范围,我认为这是您要做的。