关于C#中的“?”

1. 可空类型修饰符(T?)

强类型语言中引用类型可以为空,如:

string str=null;

而你若是定义一个值类型为空,则是会报错的。

然而,在处理数据库和其他包含可能未赋值的元素的数据类型时,我们希望可以将 null 赋值给数值类型或布尔型的功能特别有用。例如,数据库中的布尔型字段可以存储值 true 或 false,或者,该字段也可以未定义

所以C# 提供了一个特殊的数据类型,Nullable 类型(可空类型),可空类型可以表示其基础值类型正常范围内的值,和 null 值。

例如,Nullable< Int32 >,读作"可空的 Int32",可以被赋值为 -2^31 到2^31-1 之间的任意值,也可以被赋值为 null 值。

类似的,Nullable< bool > 变量可以被赋值为 true 或 false 或 null。

实际上,Nullable类型是一个结构体,它有两个公开可读字段:HasValue和Value。 HasValue是一个布尔值,当有值存储时它为真,当变量值为null时HasValue为假。当HavValue为真是时,可以取得变量的值;为假时,当尝试取得变量的值时会抛出一个异常(System.InvalidOperationException)。

声明一个 nullable 类型(可空类型)的语法如下:

用可空类型修饰符"?"来表示,

表现形式为"T?"

例如:int? 表示可空的整形,DateTime? 表示可为空的时间。

T? 其实是System.Nullable(泛型结构)的缩写形式,也就意味着当你用到T?时编译器编译 时会把T?编译成System.Nullable的形式。

例如:int?,编译后便是System.Nullable的形式。


2. 三元(运算符)表达式(?: )

例如:x?y:z 表示如果表达式x为true,则返回y;如果x为false,则返回z,是省略if{}else{}的简单形式。


3. 空合并运算符(??)

为了减少可空类型的代码量,遇到null的时候,C#提供了??操作符来获取如果为空的默认值

如果此运算符的左操作数不为null,则此运算符将返回左操作数,否则返回右操作数。

例如:a??b 当a为null时则返回b,a不为null时则返回a本身。

空合并运算符为右结合运算符,即操作时从右向左进行组合的。如,“a??b??c”的形式按“a??(b??c)”计算。


4. NULL检查运算符(?.)

?.用于判断某个对象是否为空,如果对象为NULL,则不进行后面的获取成员的运算,直接返回NULL

例如:

class Foo
{
public int N { get; } = 1;
}static void Main(string[] args)
{Foo foo = null;var n = 2 + foo?.N ?? 1Console.WriteLine(n);Console.ReadKey();//input :1
}

说明:

  1. +运算和??运算,是同级的,从左到右
  2. foo?N 其中foo为空,故foo?.N为空,而不是我们自己定义只读属性N的默认值1
  3. 2+null,注意结果是int?类型的,结果是null
  4. null??1,结果即1

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

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

相关文章

【Python学习】 - pyecharts包 - 地图可视化

安装&#xff1a; https://pan.baidu.com/s/1vAlSjVbHt0EDJY6C_38oEA 提取码&#xff1a;t9be 在这个链接中下载对应的.whl文件&#xff0c;放到下图所示的目录中。 然后打开anaconda prompt 找到对应的目录&#xff0c;输入&#xff1a; pip install pyecharts-0.1.9.4-py…

【Python学习】 - anaconda中spyder的常用快捷键总结

熟练spyder中的一些快捷键后&#xff0c;能极大提升code效率。 这里列出常用的快捷键。&#xff08;可以在spyder导航栏Tools-Preferences-Keyboard shortcut中查看有所有的快捷键&#xff09; Tab/ShiftTab:代码缩进/撤销代码缩进 Ctrl1:注释/撤销注释 Ctrl4/5:块注释/撤销块…

【机器学习】 - 关于图像质量评价IQA(Image Quality Assessment)

图像质量评价&#xff08;Image Quality Assessment,IQA&#xff09;是图像处理中的基本技术之一&#xff0c;主要通过对图像进行特性分析研究&#xff0c;然后评估出图像优劣&#xff08;图像失真程度&#xff09;。 主要的目的是使用合适的评价指标&#xff0c;使得评价结果…

【机器学习】 - CNN

什么是卷积神经网络&#xff0c;它为何重要&#xff1f; 卷积神经网络&#xff08;也称作 ConvNets 或 CNN&#xff09;是神经网络的一种&#xff0c;它在图像识别和分类等领域已被证明非常有效。 卷积神经网络除了为机器人和自动驾驶汽车的视觉助力之外&#xff0c;还可以成功…

wcf wpf mfc 区别

wcf:windows communication foundation 是微软将众多通信技术集成到一起的一个分布式通信开发框架。比如.net remoting、web service、msmq等。wpf:windows platform foundation 是新型的开发windows桌面应用的框架&#xff0c;mfc-winform-wpf &#xff0c;是这样的一个升级路…

sharepoint服务器安装已安装netframework4.5,仍提示未安装

安装sharepoint2013服务器&#xff0c;明明安装已安装.net framework4.5&#xff0c;却提示未安装&#xff0c;要求安装 下载附件&#xff0c;解压缩&#xff0c;替换掉sharepoint2013里面的dll文件&#xff0c;成功。 另外&#xff0c;安装SharePoint Server&#xff0c;本机…

【机器学习】 - 关于合适用均方误差(MSE)何时用交叉熵(cross-entropy)

分类问题用交叉熵&#xff0c;回归问题用均方误差。 至于原因&#xff0c;可以看看它们的函数式&#xff0c;主要是两种损失函数对分类和回归结果误差的衡量的方式不同。比如&#xff0c;交叉熵&#xff0c;在分类时&#xff08;热编码&#xff09;&#xff0c;如果分类正确&a…

Asp.Net中WebForm与MVC,Web API模式对比

webform&#xff0c;web mvc和web api都是asp.net官方的三套框架&#xff0c;想对比下三者的关系&#xff0c;查了下资料&#xff0c;web api跟web mvc基本同属一脉&#xff0c;只是mvc多了一个视图渲染&#xff0c;网上有些博客介绍了webform和mvc底层源码实现的不同&#xff…

【Python学习】 - 使用PIL, cv2, keras.preprocessing, scipy.imageio, matplotlib.image, skimage读取和保存图像的方法

python中图像处理相关库有很多&#xff0c;这里简单介绍PIL、cv2、scipy.imageio 、matplotlib.image、skimage等常用库&#xff0c;其中PIL库使用最方便&#xff0c;cv2库功能最强大。 PIL&#xff1a;Python Imaging Library python安装&#xff1a;pip install Pillow 这里…

sharepoint 到底是什么

1、SharePoint能做什么&#xff0c;以前我们的开发流程不外乎几个步骤&#xff1a;需求分析->建表->开发->测试->实施&#xff0c;那么请问SharePoint能开发基于数据表增删改操作的项目吗&#xff1f; 能做什么这个问题比较宽泛&#xff0c;不太容易回答。 SharePo…

【机器学习】 - Keras学习 - TensorBoard模块 - 可视化模型训练过程神器

运行环境&#xff1a;Win10 anaconda3。 TensorFlow版本&#xff1a;2.0.0 import numpy as np import tensorflow as tf import tensorflow.keras from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense import matplotlib.pyplot as…

无废话SharePoint入门教程一[SharePoint概述]

一、前言 听说SharePoint也有一段时间了&#xff0c;可一直处在门外。最近被调到SharePoint实施项目小组&#xff0c;就随着工作一起学习了一下实施与开发。但苦于网上SharePoint入门的东西实在太少&#xff0c;导致自学入门很难&#xff0c;不知道SharePoint这东西到底能做什么…

【机器学习】 - TensorFlow.Keras 建立模型 model.evaluate 和 model.predict 的区别

一、概述 model.evaluate 函数原型&#xff1a; evaluate(xNone, yNone, batch_sizeNone, verbose1, sample_weightNone, stepsNone) 输入数据和标签&#xff0c;输出损失值和选定的指标值&#xff08;如精确度accuracy&#xff09; # 评估模型,不输出预测结果loss,accuracy…

【Python学习】 - 几乎所有常用包汇总

库名称简介 Chardet 字符编码探测器&#xff0c;可以自动检测文本、网页、xml的编码。 colorama 主要用来给文本添加各种颜色&#xff0c;并且非常简单易用。 Prettytable 主要用于在终端或浏览器端构建格式化的输出。 difflib&#xff0c;[Python]标准库&#xff0c;计算文…

SharePoint 站点结构及概念

简单的记录一下Sharepoint的结构与基本概念 一、服务器场 服务器场,即主机的集群.简单点说就是两台机器互相备份&#xff0c;两个或几台机器之间有心跳线&#xff0c;定时检测对端设备的情况&#xff0c;如果对端设备出现故障&#xff0c;一台机器就会接管出问题机器的受保护…

【Python学习】 - sklearn学习 - 自带数据集sklearn.datasets.x

sklearn 的数据集有好多个种 自带的小数据集&#xff08;packaged dataset&#xff09;&#xff1a;sklearn.datasets.load_可在线下载的数据集&#xff08;Downloaded Dataset&#xff09;&#xff1a;sklearn.datasets.fetch_计算机生成的数据集&#xff08;Generated Datas…

sharepoint 概念及认证方式介绍

3.SharePoint Web 应用程序 我个人的理解&#xff0c;SharePoint Web 应用程序&#xff08;SharePoint Web Application&#xff09;代表的是 SharePoint 网站&#xff08;集&#xff09;的物理容器。 SharePoint Web 应用程序需要指定内容数据库、宿主 IIS 应用程序池、应用…

我们可以用SharePoint做什么

前言 不知不觉作为一个SharePoint的开发人员若干年了&#xff0c;从SharePoint api 开始学习&#xff0c;到了解SharePoint的结构&#xff0c;逐渐一点点了解sharepoint的体系&#xff1b;从SharePoint 的2007到2010到2013到SharePoint Online都接触了一些。本文会从个人的视角…

【Python学习】 - skimage包

一提到数字图像处理编程&#xff0c;可能大多数人就会想到matlab&#xff0c;但matlab也有自身的缺点&#xff1a; 1、不开源&#xff0c;价格贵 2、软件容量大。一般3G以上&#xff0c;高版本甚至达5G以上。 3、只能做研究&#xff0c;不易转化成软件。 因此&#xff0c…

C#sharp 必须扩展的知识点

1&#xff09;async / await 使用async / await-pattern允许在执行阻塞操作时解除UI /当前线程的阻塞。async / await-pattern的工作原理是让代码继续执行&#xff0c;即使在某些东西阻塞了执行&#xff08;如Web请求&#xff09;的情况下。 阅读更多有关async / await-patte…