我正在使用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'电话,但我不确定如何为我的目的实现它。感谢。
答案 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已发布的解决方案相同,但允许您遍历我认为您尝试做的范围集合。