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