Rss & SiteMap

Foxtable(狐表) http://www.foxtable.com

新一代数据库软件,完美融合Access、Foxpro、Excel、vb.net之优势,人人都能掌握的快速软件开发工具!
共2 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

标题:iif的bug探析

1楼
ztmdnzc 发表于:2013/8/2 12:37:00

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,建议狐爸改进。

2楼
有点甜 发表于:2013/8/2 18:59:00
 iif函数的特性就是这样的,无论是否成立,都会对表达式进行求值的。

 如果有特殊的需要,可以改用if else 语句代替。
共2 条记录, 每页显示 10 条, 页签: [1]

Copyright © 2000 - 2018 foxtable.com Tel: 4000-810-820 粤ICP备11091905号

Powered By Dvbbs Version 8.3.0
Processed in .01300 s, 2 queries.