VB.NET IIF函数, 慎用,有坑!C# 三目运算符 a?b:c
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相关推荐
- 关于VB.NET IIF函数
先说说IIF函数是怎么用的,IIF函数是个三目运算符,IIF(判断语句,第一个表达式,第二个表达式), 如果表达式值为TRUE则结果是第一个表达式的值,反之为第二个表达式的值,例如,IIF(1> ...
- iif函数 vfp_iif函数(iif函数的格式)
Print IIf(combol.Text = "男", "先生您好!", "小姐您好!") End Sub. 语法:IIf(expr, truepart, falsepart) IIf 函数的语法含 ...
- VB中的IIF() 函数
VB中的IIF() 函数 2006年08月11日 星期五 下午 01:59 IIF() 函数:根据条件返回指定的值. '光看这句话肯定不明白:-( ,接着往下看吧 IIF()语法:IIF( 逻辑表达 ...
- Mybatis-PageHelper分页--IIF函数坑
最近在开发一个页面分页的后端代码,使用的分页是mybatis的pagehelper jar组件,其中用到的版本是5.0.1 即 pagehelper-5.0.1.jar:分页时查询SQL语句 sele ...
- VB、WIN32API函数在串口操作模块的运用
1.应用 1.1RegOpenKeyEx函数涉及注册表的相关知识,先了解注册表的作用及数据结构 注册表的作用 注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windo ...
- php datedif,关于VB的DateDiff()函数与EXcel DateDif()函数
自定义了一个日期差函数.用法见附件. Function timediff(x As Date, y As Date, Optional z As String) As String Dim i As ...
- 1 access中iif函数中的_关于Access中的IIF函数的使用问题?
我当时学习的是VB,所以考的VB 如果笔试不能不看买的课本 上机你就把那个软件多做 二级可以从VFP,c语言,java,c++,vb,access,任选一科,考过即可,无论考哪一颗都要考二级公共基础知 ...
- VB中DateDiff 函数解释
VB中DateDiff 函数使用方法 DateDiff (interval, Date1 , Date2[,firstweekofyear[,firstweekofyear]]) 返回一个Varia ...
- [入门]C#语法里面,如何使用 VB的常用函数?(using Microsoft.VisualBasic)
这里是我的文章备份 原文请看: http://www.dotblogs.com.tw/mis2000lab/archive/2011/10/24/46162.aspx [入门]C#语法里面,如何使用 ...
最新文章
- 分布式文件系统:HDFS
- 如何计算机械能,问:损失的机械能如何计算?
- ASP.NET Core Razor生成Html静态文件
- 平方差和交叉熵损失函数分别用在哪些场景?
- 2020 年百度之星·程序设计大赛 - 初赛一 GPA DFS深搜
- php+select为空,SELECT时候,如何处理某字段空值?
- nginx php重定向,nginx如何重定向信息
- c语言__100以内的奇数
- 无线鼠标指针乱跑一种解决方案
- springboot毕设项目线上跳蚤市场平台iy7e7(java+VUE+Mybatis+Maven+Mysql)
- Nginx调试日志[emerg]: invalid log level “debug_http” in /path/conf/nginx.conf:XX
- GuessingGame
- 实时操作系统和分时操作系统
- Unity URP DOTS Pathfinding+Animation 10000个单位
- 车内看车头正不正技巧_最常见的3种车位倒库技巧,以后停车都不是事,建议收藏!...
- matlab偏分赋值错误,MATLAB ode45求解高阶微分方程组,出现“无法执行赋值,因为左侧和右侧的元素数目不同”问题...
- css居中怎么移动,移动端css水平垂直居中
- 一花一世界 一树一菩提
- spring 在web.xml 里面如何使用多个xml配置文件
- CSDN文章专栏的创作和管理
热门文章
- php strpos与strrpos,PHP 字符串计算 strlen、strpos 与 strrpos 函数
- 基于51单片机霍尔转速测量温度电机保护PWM调速设计proteus仿真原理图PCB
- Android Studio调用百度API(图片文字识别)
- android 字体css样式大全,移动前端一些重置样式模板和标签入门
- 桥环形高分子的标度理论——链滴图像
- 写给青云十周年的散文诗
- 计算机网络基础之会话层的功能和服务
- 微信PC扫码支付保证订单状态最终一致性
- miRPath:miRNA相关GO和KEGG功能分析
- 机器人末端执行器气爪怎么吸合_机器人的手部也称末端执行器,它是装在机器人的( )上,直接抓握工作或执行作业的部件。_学小易找答案...