C#中单问号(?)和双问号(??)的用法整理

1、单问号(?)

1.1 表示Nullable类型

C#2.0里面实现了Nullable数据类型

//A.比如下面一句,直接定义int为null是错误的,错误提示为无法将null转化成int,因为后者是不可以为null的值类型。
private int getNum = null;

//B.如果修改为下面的写法就可以初始指为null,在特定情况下?等同于基础类型为Nullable。
private int? getNum = null;
private Nullable<int> getNumNull = null;

1.2 表示三元运算符

//A.需要if语句来判断,当Request.Params["para"]不为null时,取出para的值。
string strParam =Request.Params["para"];
if ( strParam== null )
 {
    strParam= "";
 }   

 //B.用三元运算符?简化写法,取出para的值。
string strParam=Request.Params["para"] == null ? "":Request.Params["para"];

2、双问号(??):null 合并运算符

?? 运算符称为 null 合并运算符,用于定义可以为 null 值的类型和引用类型的默认值。如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。

可以为 null 的类型可以包含值,或者可以是未定义的。?? 运算符定义当可以为 null 的类型分配给非可以为 null 的类型时返回的默认值。

如果在尝试将可以为 null 值的类型分配给不可以为 null 值的类型时没有使用 ?? 运算符,则会生成编译时错误。如果使用强制转换,且当前还未定义可以为 null 值的类型,则会引发InvalidOperationException 异常。

//A.定义getNum为null,输出结果为0
private int? getNum = null;
Console.WriteLine(getNum ?? 0);

//B.定义getNum为1,输出结果为1
 private int getNum = 1;
 Console.WriteLine(getNum ?? 0);

3、单问号(?)和双问号(??)联合写法

void Main()
{

    //首先我们定义全局变量Person对象,有可能p为null的情况下取值。
    Person p = null;
    string telePhoneNo = string.Empty;  //定义telePhoneNo 

    //取Person的telePhoneNo
    //A.初始写法,if条件判断
    if (p != null)
    {
        if (p.Secret != null)
        {
            telePhoneNo = p.Secret.TelePhoneNo;
        }
    }

    //B.三元运算符写法,单问号?
    telePhoneNo = p != null ? (p.Secret != null ? p.Secret.TelePhoneNo : "") : "";
    //C. 合并运算符和三元运算符联合写法,单问号? 和双问号 ??
    telePhoneNo = p?.Secret.TelePhoneNo ?? "";
    Console.Write(telePhoneNo);
}

public class SecretByMySelf
{
    public string Password { get; set; }
    public string TelePhoneNo { get; set; }
}

public class Person
{
    public string Name { get; set; }
    public SecretByMySelf Secret { get; set; }
}

原文地址:https://www.cnblogs.com/springsnow/p/10455585.html

时间: 2024-10-04 13:23:10

C#中单问号(?)和双问号(??)的用法整理的相关文章

解析类型后加问号和双问号

变量定义中类型后带一个问号,意思是这个数据类型是NullAble类型的.用于给变量设初值的时候,给变量(int类型)赋值为null,而不是0! 例子: int? i = 3 等同于Nullable<int> i = new Nullable<int>(3); int?是泛型Nullable<int>的另一种写法. 在定义方法的时候允许传null值: public void AddUser( string name, string password, int ? role

Oracle 中单引号和双引号的区别

问题产生原因: insert into t_Cluster_Showresult(Outhostname,Domainlist,Iplist,Classify) values ("2014512-7","www.renren.com\twww.baidu.com","192.168.2.1","2") 此条语句执行不成功,报错列不允许,经查,是因为双引号的问题,改成insert into t_Cluster_Showresul

PHP教程:PHP中单引号与双引号的区别分析

PHP教程:PHP中单引号与双引号的区别分析 在PHP中,我们可以使用单引号或者双引号来表示字符串.不过我们作为开发者,应该了解其中的区别.单引号与双引号对于定义字符一个是可以解析变量一个是会把变量直接输出来,同时单引号与双引号在字符处理上单引号要优与双引号 ①转义的字符不同 单引号和双引号中都可以使用转义字符(\),但只能转义在单引号中引起来的单引号和转义转义符本身.如果用双引号("")括起字符串,PHP懂得更多特殊字符串的转义序列. 1 ②对变量的解析不同 单引号字符串中出现的变量

关于js中单引号(&#39;)和双引号(&quot;)的使用以及转义的理解

引自:http://www.cnblogs.com/gengyulong/archive/2011/05/06/2038573.html <input name="'+mlist[index].value+biduinum+'" type="text" size="12" style="width: 200px" readonly="readonly"  onclick="WdatePick

php字符串中单引号&#39;&#39;和双引号“”的区别

(1)双引号可以解析字符串中的变量,单引号不能 $a = 10; $str = "this a var $a"; //输出this a var 10 (2)在双引号中可以使用转义字符\n \r 等,在单引号中不能(单引号中只能转义单引号'' 和 转义字符本身\) $str = 'this a var \'a\''; //this a var 'a' (3) php字符串中单引号''和双引号""的区别

Google Guava 库用法整理&lt;转&gt;

参考: http://codemunchies.com/2009/10/beautiful-code-with-google-collections-guava-and-static-imports-part-1/(2,3,4) http://blog.publicobject.com 更多用法参考http://ajoo.iteye.com/category/119082 附 guava中文api地址http://ifeve.com/google-guava/ 以前这么用: Java代码   M

linux学习:特殊符号,数学运算,图像与数组与部分终端命令用法整理

一:特殊符号用法整理 算术比较-eq 等于-ne 不等于-gt 大于-lt 小于-ge 大于或等于-le 小于或等于-a 逻辑与 and &&-o 逻辑或 or ||[ $var -eq 0 ]    #当$var等于0时,返回真[ $var -ne 0 ]    #当$var为非0时,返回真[ $var1 -ne 0 -a $var2 -gt 2 ][ $var1 -ne 0 -o $var2 -gt 2 ] 字符串比较[[ $str1 = $str2 ]]     #当str1等于st

C++ List的用法(整理)

来源:http://blog.csdn.net/lskyne/article/details/10418823 C++ List的用法(整理) 2013-08-27 23:04 42624人阅读 评论(2) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢. assign() 给list赋值 back() 返回最后一个元素 begin() 返回指向第一个元素的迭代

Spring JdbcTemplate用法整理

Spring JdbcTemplate用法整理: xml: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www