[转载]C#操作符??和?:
先看如下代码:
string strParam = Request.Params[ "param" ]; if ( strParam== null ) { strParam= "" ; } string strParam= Request.Params[ "param" ] == null ? "" : Request.Params[ "param" ]; |
你发现,尽管实现的同一个功能,但第二段代码要比第一段代码是不是更简洁。 这里的” ?:“就是一个三元的操作符。利用这个三元操作符也称条件操作符, 就很简单的把一个 if 语句给实现了。 在使用条件操作符的时候要注意,假定条件表达式是这样 x?y:z, 表达式类型的只能是使y 和z的变量类型之一,换句话说就是 y和z的变量类型决定这个条件表达式的类型, 无论y和z是同一类型,还是y和z不是同一类型。 如果表达式的类型和赋值类型不一致,发生编译时错误 ,例如:如果你想实现如下代码: string strTemp ; object obj; .... if (strTemp == "" ) obj = DBNull.Value; else obj = strTemp ; 然后为了简单,改成下面这种形式: string strTemp; object obj = strTemp == "" ?DBNull.Value:strTemp; 你编译的时候,会报错。因为DBNull和 string 之间没隐式转换,修改成如下代码就可以了: object obj = strTemp == "" ? DBNull.Value: ( object )strTemp; 另外条件操作符是向右关联的,从左到右进行计算,于是a?b:c?d:e 应理解为 a?b:(c?d:e)。 上面提到了DBNull,在c#2.0里面实现了Nullable数据类型,别小看这个数据类型,其实非常有用, 从此我们就可以放弃对 object 数据进行 if ( object == null )这样的判断了。同时你会发现, 在数据库应用上,数据库中有的字段允许取空值,在C#世界中引入nullable类型正好与之对应 ,从(C#)对象映射到关系数据库对象,或者反过来,转换都是比较平滑。 为了实现Nullable数据类型转换成non-Nullable型数据,就有了一个这样的操作符”??(两个问号)“,双问号操作符意思是取所赋值??左边的,如果左边为 null ,取所赋值??右边的, 比如 int y = x ?? -1 如果x为空,那么y的值为-1. 于是这时候就可以把最上面第二段代码改成: string strParam= Request.Params[ "param" ]?? "" ; 嘿嘿,是不是更简洁了。 另外还有”?(单问号)“修饰符,是System.Nullable的缩写形式,比如 int ?代表是可空的整形, 例如: int ? a = 1 或者 int ? b= null 。Nullable类型具有一个HasValue的 bool 类型只读属性, 当Nullable类型实例的该属性为 true 时,则表示该实例是非空实例,包含一个已知值Value, HasValue为 false 时,访问Value属性将导致System.InvalidOperationException。 |
[转载]C#操作符??和?:的更多相关文章
- [转载]MongoDB学习 (五):查询操作符(Query Operators).1st
本文地址:http://www.cnblogs.com/egger/archive/2013/05/04/3059374.html 欢迎转载 ,请保留此链接๑•́ ₃•̀๑! 查询操作符(Quer ...
- C#中如何利用操作符重载和转换操作符 (转载)
操作符重载 有的编程语言允许一个类型定义操作符应该如何操作类型的实例,比如string类型和int类型都重载了(==)和(+)等操作符,当编译器发现两个int类型的实例使用+操作符的时候,编译器会生成 ...
- 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决(转载)
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 转载请注明出处: https://github.com/qiu-deqing/FE-interview
转载请注明出处: https://github.com/qiu-deqing/FE-interview Table of Contents generated with DocToc FE-inter ...
- sizeof(转载)
原文地址:http://blog.sina.com.cn/s/blog_5da08c340100bmwu.html 转载至:http://www.cnblogs.com/wangkangluo1/ar ...
- JSON相关知识,转载:删除JSON中数组删除操作
一:JSON是什么 JSONg格式:对象是一个无序的“名称/值”对的集合. 对象以括号开始,括号结束. 名称冒号分隔值. "名称/值"之间用逗号分隔 例: var people = ...
- 转载:SqlServer数据库性能优化详解
本文转载自:http://blog.csdn.net/andylaudotnet/article/details/1763573 性能调节的目的是通过将网络流通.磁盘 I/O 和 CPU 时间减到最小 ...
- 【转载】new和malloc的区别
本篇随笔为转载,原贴地址:C++中new和malloc的十点区别. 前言 几个星期前去面试C++研发的实习岗位,面试官问了个问题: new与malloc有什么区别? 这是个老生常谈的问题.当时我回答n ...
- [转载] 深入理解Android之Java虚拟机Dalvik
本文转载自: http://blog.csdn.net/innost/article/details/50377905 一.背景 这个选题很大,但并不是一开始就有这么高大上的追求.最初之时,只是源于对 ...
随机推荐
- python---不支持中文注释解决办法
很神奇的一件事儿,pycharm不支持中文注释,具体解决办法: #-*- coding: utf- -*- 具体使用:
- flask BytesIO() 多个文件打包下载 zipfile
使用zipfile模块可以将多个文件打包成zip文件进行下载,但是常规的操作方式会在服务器磁盘上生成一个zip文件占用磁盘空间. 后引入BytesIO将文件写入到内存中然后下载: def dl_pla ...
- OpenCV Cut Image via ROI 根据兴趣区域剪裁图片
我们在使用OpenCV时,有时候需要对现有图片剪裁,比如只需要一个小窗口中的内容,那么我们可以通过OpenCV的兴趣区域 Region of Interest (ROI) 来很轻易的实现,操作也很简单 ...
- ThinkPHP widge使用示例
1.widge一般用于公用模块的设计与使用,以便加强软件模块的复用性与重用性 一般使用include方法设计公共模块,比如<include file="home:header" ...
- 不错的Spring学习笔记(转)
Spring学习笔记(1)----简单的实例 --------------------------------- 首先需要准备Spring包,可从官方网站上下载. 下载解压后,必须的两个包是s ...
- Linux查看及设置系统字符集
查看正在使用的字符集 查看可以设置的字符集 locale -a 修改字符集 export LANG=zh_CN.gbk
- 关于Python的集合set
网上那么多说创建集合的语句是: >>>a=set([1,2,3]) python 3.6.3,你们真的能运行吗? 我这里报: Traceback (most recent call ...
- pycharm 使用激活补丁永久激活+汉化
提供激活补丁激活方式(推荐使用-使用期到2100年,基本永久啦) 破解补丁激活 1.下载 https://pan.baidu.com/s/1GehNMTXagUxUEted1DT-Pg 密码:6689 ...
- windows server r2 搭建 ftp服务器
1:安装ftp服务器 开始>管理工具>服务器管理器>打开服务器管理器,找到添加角色,然后点击,弹出添加角色对话框,选择下一步>选择Web服务器(IIS),然后选择FTP服务,直 ...
- 实习培训——Java基础(2)
实习培训——Java基础(2) 1 Java 变量类型 在Java语言中,所有的变量在使用前必须声明.声明变量的基本格式如下: type identifier [ = value][, identi ...