IIf 函数

  • 先说说IIF函数是怎么用的, IIF函数是个三目运算符, 其语法:
    IIf(判断表达式, 真值部分表达式, 假值部分表达式)
    根据判断表达式的值, 当表达式为真时, 返回真值部分; 当表达式为假时, 返回假部分.
  • 例如:
    IIF(1>0,1,0) 1>0为TRUE 所以 整个表达式的值应该为1 .

慎用IIf 函数,其坑

  • 用起来不难, 但需要注意的是 IIF函数 是不短路的 , 就是说它是 将后面的两个表达式的值都计算出来 ,才返回值 ; 所以用起来要特别注意, 不小心就会出错.
  • 解释一下短路意思:如a andalso b判断是短路的,先运算a,若为False,整个表达式就为False, 是不会继续运算 b的。
  • 例如:程序中,某些查询条件是可选的,若用户填写此查询条件,程序查询SQL就加上该条件:
 Dim lsUserIDs As String ' ## 此处没有初始化为  = String.Empty  或 = ""if Session("UserID") <> "" andalso ... then'..... 模拟一段逻辑: 给 变量 lsUserIDs 赋值lsUserIDs = "user1, user2, User3"end if....' 拼接查询SQL时lsSQL = IIf(String.IsNullOrEmpty(lsUserIDs), "", String.Format("   AND UserID IN('{0}')", lsUserIDs.Replace(",", "','"))) ' ## 此处IIf 函数有坑 ##
  • 当 程序不满足一定条件,没有跑【给变量 lsUserIDs 赋值】这段代码,ls
    IIf 语句中的 String.IsNullOrEmpty(lsUserIDs) 没有问题,能判断出 lsUserIDs 变量还是为 nothing,但是由于 IIF函数 是不短路的 ,也就是说无论判断表达式真假 ,程序都会对后面 2个表达式进行运算,即程序会先运算lsUserIDs.Replace(",", "','") ,然后才返回 ""lsSQL .

运算lsUserIDs.Replace(",", "','") 时会报错: Object reference not set to an instance of an object.
lsUserIDs对象引用未实例化。

  • 你可以测试一下
    iif(1,4,1/0)
    iif(0,1/0,4)
    无论哪个都报错,因为假部分表达式中:除数为0,报错。

IIf 函数 相当于在 C# 中

三目运算符, 语法: 表达式 ? 真 : 假

iif(a>b,a,b);a>b?a:b;

总结

从效率上讲,如果是大运算,这个无疑降低了效率。
从逻辑上讲,如果你前面的代码 对真假部分的参数有赋值的,会出现意料之外的错误。

总而言之,慎用!

听说:iif 函数另一个问题是,它返回的是object弱类型。

VB.NET IIF函数, 慎用,有坑!C# 三目运算符 a?b:c相关推荐

  1. 关于VB.NET IIF函数

    先说说IIF函数是怎么用的,IIF函数是个三目运算符,IIF(判断语句,第一个表达式,第二个表达式), 如果表达式值为TRUE则结果是第一个表达式的值,反之为第二个表达式的值,例如,IIF(1> ...

  2. iif函数 vfp_iif函数(iif函数的格式)

    Print IIf(combol.Text = "男", "先生您好!", "小姐您好!") End Sub. 语法:IIf(expr, truepart, falsepart) IIf 函数的语法含 ...

  3. VB中的IIF() 函数

    VB中的IIF() 函数 2006年08月11日 星期五 下午 01:59 IIF() 函数:根据条件返回指定的值.  '光看这句话肯定不明白:-( ,接着往下看吧 IIF()语法:IIF( 逻辑表达 ...

  4. Mybatis-PageHelper分页--IIF函数坑

    最近在开发一个页面分页的后端代码,使用的分页是mybatis的pagehelper jar组件,其中用到的版本是5.0.1 即 pagehelper-5.0.1.jar:分页时查询SQL语句 sele ...

  5. VB、WIN32API函数在串口操作模块的运用

    1.应用 1.1RegOpenKeyEx函数涉及注册表的相关知识,先了解注册表的作用及数据结构 注册表的作用 注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windo ...

  6. php datedif,关于VB的DateDiff()函数与EXcel DateDif()函数

    自定义了一个日期差函数.用法见附件. Function timediff(x As Date, y As Date, Optional z As String) As String Dim i As ...

  7. 1 access中iif函数中的_关于Access中的IIF函数的使用问题?

    我当时学习的是VB,所以考的VB 如果笔试不能不看买的课本 上机你就把那个软件多做 二级可以从VFP,c语言,java,c++,vb,access,任选一科,考过即可,无论考哪一颗都要考二级公共基础知 ...

  8. VB中DateDiff 函数解释

    VB中DateDiff 函数使用方法 DateDiff (interval, Date1 , Date2[,firstweekofyear[,firstweekofyear]])  返回一个Varia ...

  9. [入门]C#语法里面,如何使用 VB的常用函数?(using Microsoft.VisualBasic)

    这里是我的文章备份 原文请看: http://www.dotblogs.com.tw/mis2000lab/archive/2011/10/24/46162.aspx [入门]C#语法里面,如何使用 ...

最新文章

  1. 分布式文件系统:HDFS
  2. 如何计算机械能,问:损失的机械能如何计算?
  3. ASP.NET Core Razor生成Html静态文件
  4. 平方差和交叉熵损失函数分别用在哪些场景?
  5. 2020 年百度之星·程序设计大赛 - 初赛一 GPA DFS深搜
  6. php+select为空,SELECT时候,如何处理某字段空值?
  7. nginx php重定向,nginx如何重定向信息
  8. c语言__100以内的奇数
  9. 无线鼠标指针乱跑一种解决方案
  10. springboot毕设项目线上跳蚤市场平台iy7e7(java+VUE+Mybatis+Maven+Mysql)
  11. Nginx调试日志[emerg]: invalid log level “debug_http” in /path/conf/nginx.conf:XX
  12. GuessingGame
  13. 实时操作系统和分时操作系统
  14. Unity URP DOTS Pathfinding+Animation 10000个单位
  15. 车内看车头正不正技巧_最常见的3种车位倒库技巧,以后停车都不是事,建议收藏!...
  16. matlab偏分赋值错误,MATLAB ode45求解高阶微分方程组,出现“无法执行赋值,因为左侧和右侧的元素数目不同”问题...
  17. css居中怎么移动,移动端css水平垂直居中
  18. 一花一世界 一树一菩提
  19. spring 在web.xml 里面如何使用多个xml配置文件
  20. CSDN文章专栏的创作和管理

热门文章

  1. php strpos与strrpos,PHP 字符串计算 strlen、strpos 与 strrpos 函数
  2. 基于51单片机霍尔转速测量温度电机保护PWM调速设计proteus仿真原理图PCB
  3. Android Studio调用百度API(图片文字识别)
  4. android 字体css样式大全,移动前端一些重置样式模板和标签入门
  5. 桥环形高分子的标度理论——链滴图像
  6. 写给青云十周年的散文诗
  7. 计算机网络基础之会话层的功能和服务
  8. 微信PC扫码支付保证订单状态最终一致性
  9. miRPath:miRNA相关GO和KEGG功能分析
  10. 机器人末端执行器气爪怎么吸合_机器人的手部也称末端执行器,它是装在机器人的( )上,直接抓握工作或执行作业的部件。_学小易找答案...