Foxtable(狐表)官方栏目BUG收集 → iif的bug探析


  共有5446人关注过本帖树形打印复制链接

主题:iif的bug探析

帅哥哟,离线,有人找我吗?
ztmdnzc
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:501 积分:4167 威望:0 精华:0 注册:2013/1/18 13:34:00
iif的bug探析  发帖心情 Post By: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楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2013/8/2 18:59:00 [只看该作者]

 iif函数的特性就是这样的,无论是否成立,都会对表达式进行求值的。

 如果有特殊的需要,可以改用if else 语句代替。

 回到顶部