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

C# 是否可以创建条件语句数组?,c#,excel,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调用生成条件语句,我想知道是否有办法让我的程序检查循环通过的一系列条件,而不是一堆“或”语句。我的代码如下:

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 Interop,我会注意到
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());
List stepsList=新列表
{
条件1,
条件2,
...
};
TrueForAll(f=>f());

这基本上与发布的解决方案相同,但允许您在一组范围内进行迭代,这是我认为您正在尝试的。

旁注:您不应该使用
|
而不是
|
?您确实应该使用
|
而不是
|
,这样表达式一开始就会短路
正确
并停止评估其余部分。我的错误,那是我未经思考就发布了。。谢谢你的提示!您的条件始终为真
!strings.Contains
。这正是我要找的,非常感谢@kazemAkhgary先生谢谢你的邀请correction@M.kazemAkhgary谢谢-我错过了它使用的
=。在这种情况下,原始代码应该使用
&&
而不是
|
@M.kazemAkhgary有趣的是,我不知道它们是我代码的“慢”实现。我会接受你的建议。多谢各位@RinkTaguar Yes COM调用可能相对较慢。这就是说,如果速度明显较慢,那么先获得一些有效的东西,然后专注于使其更好(这样您就可以始终返回到工作代码)。
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.