当前位置:首页 > 技术积累 > 正文内容

C#中问号“?”的用法

竹林之风10年前 (2015-04-14)技术积累3801

        在C#中问号有单问号和双问号两种场景,其中单问号就是用于条件表达式的一个三元运算符;双问号有两个用法:可空类型修饰符和空合并运算符。

(1)条件表达式三元运算符:如x>y?a:b,即当x>y时表达式取值a,否则取值b;

c = x > y ? a : b;
//等价于
if (x > y) {
    c = a;
}
else {
    c = b;
}

(2)可空类型修饰符:int、bool等值类型不能赋值为null(空引用),为了使值类型也能赋值为空引用以表示不存在的值,引入了System.Nullable<T>(T为值类型),缩写即为T?,如int?表示System.Nullable<int>;

int? x = null;//可空类型默认值都是null,而值类型如int默认值为0、bool默认值为false等
bool? result = true;
/*
    当x为null且被引用时会引发“可为空的对象必须具有一个值”异常
    可空类型被引用或参与运算时,会调用Value属性,当可空类型未被赋值时即会引发此异常
*/
int y = x + 1;
x = 1;
y = x.Value;//将可空类型赋值给值类型时,使用Value属性

(3)空合并运算符:用于定义可空类型和引用类型的默认值,是右结合性运算符;

int y = x ?? 0;//当x为null时y取值0,否则取值x.Value,此运算符可简化可空类型null判断
int y = null == x ? 0 : x.Value;//与以上语句等价

扫描二维码推送至手机访问。

版权声明:本文由久爱编程网发布,如需转载请注明出处。

本文链接:https://www.9icode.com/index.php/post/8.html

标签: C#基础
分享给朋友:

相关文章

ASP.NET实现HTTP长轮询(三)——MVC

ASP.NET实现HTTP长轮询(三)——MVC

        本文主要描述如何在ASP.NET MVC中实现长轮询:(1)控制器继承AsyncController:using System.Threading; using ...

ASP.NET中报“无法在已发送HTTP标头之后进行重定向”异常问题解决

ASP.NET中报“无法在已发送HTTP标头之后进行重定向”异常问题解决

        ASP.NET中报“无法在已发送HTTP标头之后进行重定向”异常时,其中一个原因是:在已经重定向后又重定向。在ASP.NET中实现重定向有以下几...

ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常问题解决

ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常问题解决

        ASP.NET中报“无法在已发送HTTP标头之后设置状态”异常,是因为设置Response的StatusCode之前,程序已设置响应标头。可从以...

从被扫描记录看网站安全应该注意的一些细节

从被扫描记录看网站安全应该注意的一些细节

1、尽可能地隐藏服务器真实IP,减少攻击目标。例如使用负载均衡、网关等作为门户,由负载均衡或网关转发到后端服务器。2、服务器必须开放的服务(除HTTP、HTTPS等为公众开放的服务外),尽可能改为其它较大的不常用的端口号,这样攻击者需要扫描...

ASP.NET Core网站报“An assembly specified in the application dependencies manifest was not found”异常解决

ASP.NET Core网站报“An assembly specified in the application dependencies manifest was not found”异常解决

        ASP.NET Core网站报“An assembly specified in the application dependencies ma...

ASP.NET MVC WebApi控制器方法使用async假死超时问题

ASP.NET MVC WebApi控制器方法使用async假死超时问题

        在一个ASP.NET MVC WebApi控制器方法中使用async标记为异步方法后,有时会假死超时。根本原因是同步方法和异步方法混合造成的死锁...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。