Dim Vals() As String = e.Node.Fullname.Split(".") '用fullname,分隔符为"."
Dim Filter As String = "[DXCS] = '" & Vals(0) & "' And [文件大小] = '" & Vals(1) & "'"
Dim drs As List(Of DataRow) = DataTables("pc").Select(filter,"修改时间")
Dim va As Short=vals(0)
情况一:
出错的代码:vals(0)=1 时,第一个MessageBox能够执行,后三个MessageBox出错,=2时,后两个出错,=3时,最后一个出错。
If va<=4 Then
MessageBox.Show(iif(va>=1,drs(4*va-4)("文件名") & "| " & drs(4*va-4)("修改时间") & "| " & drs(4*va-4)("文件大小"),""))
MessageBox.Show(iif(va>=2,drs(4*va-3)("文件名") & "| " & drs(4*va-3)("修改时间") & "| " & drs(4*va-3)("文件大小"),""))
MessageBox.Show(iif(va>=3,drs(4*va-2)("文件名") & "| " & drs(4*va-2)("修改时间") & "| " & drs(4*va-2)("文件大小"),""))
messageBox.Show(iif(va=4,drs(4*va-1)("文件名") & "| " & drs(4*va-1)("修改时间") & "| " & drs(4*va-1)("文件大小"),""))
End If
情况二:
改成如下代码,vals(0)=1 ,2,3,4时,全部能够执行。
If va<=4 Then
MessageBox.Show(iif(va>=1,drs(4*va-4)("文件名") & "| " & drs(4*va-4)("修改时间") & "| " & drs(4*va-4)("文件大小"),""))
MessageBox.Show(iif(va>=2,"t","w"))
MessageBox.Show(iif(va>=3,"t","w"))
MessageBox.Show(iif(va>=4,"t","w"))
End If
参考帮助,iif在条件不成立时情况一中应该等于"",在情况二中等于w,情况二能够执行,情况一却出错,其原因是在条件不成立时iif却仍对drs(4*va-3)("文件名") & "| " & drs(4*va-3)("修改时间") & "| " & drs(4*va-3)("文件大小")进行运算,而不是直接等于"",情况二中t,w是不需要运算的,所以能够执行。
根据以上分析,iif存在条件不成立时仍对truevalue进行运算而不是直接等于falsevalue的bug,建议狐爸改进。