if (!(errorlist.Contains(-1)) || !(errorlist.Contains(1))) break;
我无法理解为什么即使错误列表在列表中包含1,此代码也会突破循环。调试时,errorlist[0] = 1
和其他索引为0。
可能是什么解决方案?
答案 0 :(得分:3)
您需要Public Sub SetValue(ByRef Key As String, _
Optional ByRef ws As Worksheet = Nothing)
'Make sure we have the object
If ws Is Nothing Then
Set ws = ThisWorkbook.Sheets(SheetName)
End If
End Sub
而不是&&
。 (如果你需要同时在列表中同时出现这两个)
在你的情况下,第一个条件成功。
您的列表中不包含||
,因此条件-1
会中断。
修改
如果您仍需要保留if(!errorlist.Contains(-1))
,则可以执行类似
||
如果您无法使用if(!errorList.Any((p)=> { return (p == 1 || p== -1);}))
,您仍然可以将其定义为
Any
答案 1 :(得分:1)
如果我理解你的话
为什么这个代码断开循环,即使错误列表包含1 in 列表
当且仅当errorlist
不包含1
或-1
时,您才想要破解:
if (!((errorlist.Contains(-1)) || (errorlist.Contains(1)))) break;
答案 2 :(得分:0)
您的条件是检查列表是否包含两者 -1 AND 1.我怀疑您想要
if (!(errorlist.Contains(-1)) && !(errorlist.Contains(1))) break;
或
if (!(errorlist.Contains(-1) || errorlist.Contains(1))) break;
答案 3 :(得分:0)
||
表示OR。
因此,如下所示:
if(errorList不包含-1)或(errorList不包含1)然后中断。
正如您所见,errorList因此必须包含-1 AND 1才能中断。
如果您不想在任何一个存在时中断,请将||
(或)更改为&&
(AND):
if (!(errorlist.Contains(-1)) && !(errorlist.Contains(1))) break;
要实现此目的,您可以执行以下操作:
if (!(errorlist.Contains(-1) || errorlist.Contains(1))) break;
现在读到:
如果不是则中断(errorList包含-1或者errorList包含1)。在应用NOT之前,请注意未在整个表达式前面移动的更改以及OR部分。
这似乎是你想要建模的。