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数据进行 ifobject==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。

转载于:https://www.cnblogs.com/joyang/p/5015024.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查找论文源代码网站

https://paperswithcode.com/

朗兰兹纲领:关于数学大一统的伟大构想

麦克斯韦方程组来源:今日头条我们经常聊到物理学家都在追寻物理学的大一统,物理学的第一次大一统是麦克斯韦的麦克斯韦方程组,将电学与磁学相统一,建立了电磁学理论,后来,爱因斯坦想继续完成麦克斯韦未竟之…

JavaSE——常用类库(下)(Date、DateFormat、Calendar、System类)

第1节 常用类库(下) 六、java.util.Date Date类表示特定的时刻,精度为毫秒。 在JDK 1.1之前, Date类还有两个附加功能。 它允许将日期解释为年,月,日,小时,分钟和秒值。 它还允许…

python集合set,frozenset--笔记

《Python3程序开发指南》笔记。 python提供了2种内置的集合类型:可变的set类型、固定的frozenset类型。 只有可哈希运算的对象可添加到集合中。可哈希的数据类型:float、frozenset、int、str、tuple。不是可哈希的:dict、list、set 集合方法与…

python复制之坑

在python中想要复制一个变量a的值,可以直接ba,但这种复制方法a改变时b也会一起改变,因为a,b同时指向一个变量,b只是a的另一个名字而已,看一个例子: a [1,2,3] b a a[0] 0 print(b) # [0, 2,…

世界隐形冠军比拼:德国1307家、美国366家、中国68家

来源:股权投资论坛目录一、隐形冠军的概念二、隐形冠军的四个特征三、隐形冠军为何隐形四、隐形冠军到底有多牛五、如何成为隐形冠军六、中国隐形冠军多吗1隐形冠军的概念“隐形冠军”这个概念是赫尔曼西蒙教授提出的。1986年,他在研究德国出口数据时发现…

JavaSE——常用类库(String类)

第1节 常用类库——String 因为String相对之前的类来说更加常用一些,所以对字符串类进行专门的整理。 1. 概述 String类表示字符串,Java中的所有字符串文字都实现为此类的实例。字符串是不变的,它们的值在创建后无法更改 。因为它的创建是通…

VVDocumenter 使用

函数说明文档插件下载链接 https://github.com/onevcat/VVDocumenter-Xcode下载后,直接运行项目升级Xcode后可能不能再次使用,需要做一些处理从Xcode 5开始,苹果要求加入UUID证书从而保证插件的稳定性。因此Xcode版本更新之后需要在VVDocumen…

TensorFlow打印一个tensor值报错

有时需要打印出一个tensor的值,明明代码没有问题,却一直报错,打印不出来,这是因为没有全局变量初始化的原因: sess.run(tf.global_variables_initializer())

大自然创作的分形艺术

来源:http://blog.sciencenet.cn/blog-420554-363521.html数学上的分形 (Fractal) 是指“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少会大略)是整体缩小尺寸的形状”。数学家们已经创作出许多美丽的…

JavaSE——类集(上)(Collection、List、Iterator、forEach)

第2节 集合(上) 因为已经有数据结构的基础,前面有关数据结构的知识就不单独整理了,直接上Java的集合类的知识。 一、类集(集合类) 1.1 集合概述 集合: 集合是java中提供的一种容器&#xff…

第二个spring冲刺总结

讨论成员:罗凯旋、罗林杰、吴伟锋、黎文衷 第二阶段总体是做到了四则运算的demo,,包括APP进入动画,以及界面的基本效果设计,还有能进行综合计算(选择题,可以 自动生成简单,容易,困难…

python matplotlib画图是设置线宽

在画图时设置linewidth属性 import matplotlib.pyplot as pltplt.plot(x, y, linewidth1)

图灵奖得主姚期智:求解人工智能的中国答案

来源:清华大学他是“图灵奖”创立以来首位获奖的亚裔学者,也是迄今为止获此殊荣的唯一华裔计算机科学家。2004年从普林斯顿辞去终身教职回到清华任教。2005年,他为清华本科生创立了计算机科学实验班“姚班”。如今,在中国乃至全球…

(翻译)构建自定义组件

原文地址https://theliquidfire.wordpress.com/2015/07/20/custom-component-based-system/ 我很喜欢的一个老外大神的博客,翻译出来以供自己学习,也共享出来。 我自己的总结就是,在对model层编码 而没有继承MonoBehaviour的情况下&#xff0…

python matplotlib画图设置坐标轴刻度的字体大小

import matplotlib.pyplot as pltplt.xticks([0, 100, 200, 300, 400, 500, 600, 700]) plt.tick_params(labelsize13) #刻度字体大小13

JavaSE——类集(下)(Set、Comparable、Collections、Comparator、Map)

第2节 集合(下) 一、Set接口 java.util.Set 接口和 java.util.List接口一样,同样继承自 Collection接口,它与Collection接口中的方法基本一致,并没有对 Collection接口进行功能上的扩充,只是比Collection…

美国国家科学院发布《材料研究前沿:十年调查》

来源:中国科学院科技战略咨询研究院2月8日,美国国家科学院发布了针对材料研究的第三次十年调查《材料研究前沿:十年调查》报告。这次的调查主要评估了过去十年中材料研究领域的进展和成就,确定了2020-2030年材料研究的机遇、挑战和…

useContext 和 useReducer语法讲解

useContext 和 useReducer useContext 和 useReducer 传递state dispatch, 模拟redux useContext 用法 // App.tsx const UserContext React.createContext({ name: }) function App() {return (<UserContext.Provider value{{ name: jack }}><div><p>欢…

Openfire on Centos7

学习一下linux&#xff0c;装备 1&#xff09;centos 最小安装。&#xff08;找抽的节奏&#xff09; 2&#xff09;必备 oepnssh yum install openssh-server.x86_64 3&#xff09;配置网络。打开 /etc/sysconfig/network-scripts/ifcfg-* 网卡配置。 TYPEEthernet #改为s…