在C#中(?)可空类型修饰符,(??)空合并运算符以及(?:)三元运算符的用法

简介

在C#中的一些修饰符以及特殊符号的使用,也都是从C与C++中继承的特性,比如'?'和"?:",当然在C#中还加入了"??"符号,这些符号的作用具有较大的区别,可以简化程序编写时候的语句长度和行数,或者实现一些正常情况下不被编译器允许的功能。

目录

简介

?: 三元运算符

说明

例子

? 可空类型修饰符

说明

例子

?? 空合并运算符

说明

例子


?: 三元运算符

说明

这一个符号的用法,主要是简化一个判断和返回数值的语句,功能上与if else一致,基本的格式是

判断语句?True返回值:False返回值

需要注意的是,三元运算符可能遇到数据转换的问题,这里引用一下关于三元运算符数据转换的说明

三元操作符类型的转换规则: 若两个操作数不可转换,则不做转换,返回值为Object类型。 若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换,int类型转换为long类型,long类型转换为float类型等。 若两个操作数中有一个是数字S,另外一个是表达式,且其类型标示为T,那么,若数字S在T的范围内,则转换为T类型;若S超出了T类型的范围,则T转换为S类型

例子

判断输入的参数x是否小于参数y的表达式

 

 static void Main(string[] args)
        {
            Func<int,int,string> isGreat = (x,y) => x > y ? "Yes":"No";
            Console.WriteLine("Is great? :{0}",isGreat(10,20));
            Console.ReadLine();
        }

 

? 可空类型修饰符

说明

这一个符号主要是让一些不能为null的值表示为null,比如说通常情况下,任何非集合类,地址类的数据类型都不可以为null,比如int,float,在初始化的情况下,如果不赋值也不为null,若强制赋null则编译器会报错。

可空类型修饰符可以将这一个情况解决,提供能让一般值类型也能够空的方法。

例子

可以看到这一个简单的例子中,编译器报错,因为string类型是引用——符号代表的是内存地址,而这里int类型不是

 在这里的位置,可以看到在int声明后增加了一个?符号,此时编译器就不会报错,可以允许int类型为null

static void Main(string[] args)
        {
            string str = null;//不出错
            int? i = null;//编译器出错,不可为null的值类型
            Console.WriteLine(str==null?"str is null":"str not null");
            Console.WriteLine(i == null ? "i is null" : "str not null");

        }

经过修改后编译运行得到的最终结果

 

 

 

?? 空合并运算符

说明

空合并运算符是在C#中比较新鲜的一个运算符,他的方法是判断是否是null并返回值,需要注意的是,在多个??一起出现在一行代码中的时候他的操作是从右往左进行的。如果运算符??左侧的值是null则返回右侧的值,如果左侧的值不为null则返回左侧值

例子

这里在一段程序里面设置了三个变量,前两个是字符串

 static void Main(string[] args)
        {
            string str = null;//不出错
            string str2 = null;
            int j = 10;
            Console.WriteLine(str??"is null");  //因为str为空所以返回is null 
            Console.WriteLine(str2??"12"??j.ToString());  //因为从右侧往左运算所以最终返回12
            Console.ReadLine();
        }

最终的结果

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值