C# ?? 和 ?: 运算符
2015-07-24 21:33
429 查看
?:条件运算符 根据 Boolean 表达式的值返回两个值之一。
下面是条件运算符的语法。condition ? first_expression : second_expression;
condition 的计算结果必须为 true 或 false。 如果 condition 为 true,则将计算 first_expression 并使其成为结果。 如果 condition 为 false,则将计算 second_expression 并使其成为结果。 只计算两个表达式之一。
first_expression 和 second_expression 的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换。
条件运算符为右联运算符。 表达式 a ? b : c ? d : e 作为 a ? b : (c ? d : e) 而非 (a ? b : c) ? d : e 进行计算。
无法重载条件运算符。
int a = 6; int b = 6; bool isSame = a == b ? true : false;
isSame 的结果为true;
?? 运算符称作 null 合并运算符。如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。
可以为 null 的类型可以表示类型的域中的值,或者值可以是未定义的(在这种情况下,值为 null)。 当左操作数具有一个值为 null 的可以为 null 的类型时,可以使用 ?? 运算符的语法表现力来返回适当的值(右操作数)。 如果在尝试将可以为 null 值的类型分配给不可以为 null 值的类型时没有使用 ?? 运算符,则会生成编译时错误。 如果使用强制转换,且当前未定义可以为 null 值的类型,则会引发 InvalidOperationException 异常。class NullCoalesce { static int? GetNullableInt() { return null; } static string GetStringValue() { return null; } static void Main() { int? x = null; // Set y to the value of x if x is NOT null; otherwise, // if x = null, set y to -1. int y = x ?? -1; // Assign i to return value of the method if the method's result // is NOT null; otherwise, if the result is null, set i to the // default value of int. int i = GetNullableInt() ?? default(int); string s = GetStringValue(); // Display the value of s if s is NOT null; otherwise, // display the string "Unspecified". Console.WriteLine(s ?? "Unspecified"); } }
可以为 null 的类型具有以下特性:
.可以为 null 的类型表示可被赋值为 null 值的值类型变量。 无法创建基于引用类型的可以为 null 的类型。 (引用类型已支持 null 值。).语法 T? 是 Nullable 的简写,此处的 T 为值类型。 这两种形式可以互换。
.为可以为 null 的类型赋值的方法与为一般值类型赋值的方法相同,如 int? x = 10; 或 double? d = 4.108。 对于可以为 null 的类型,也可向其赋 null: int? x = null. 值
.如果基础类型的值为 null,请使用 Nullable.GetValueOrDefault 方法返回该基础类型所赋的值或默认值,例如 int j = x.GetValueOrDefault();
.将 HasValue 和 Value 只读属性用于测试是否为空和检索值,如下面的示例所示:if(x.HasValue) j = x.Value;
.如果此变量包含值,则 HasValue 属性返回 true;或者如果是 null 则返回 false。
.如果已赋值,则 Value 属性返回该值。 否则,将引发 InvalidOperationException。
.HasValue 的默认值为 false。 Value 属性没有默认值。
.还可以将 == 和 != 操作数用于可为 null 的类型,如下面的示例所示:if (x != null) y = x;
.使用 ?? 算符分配默认值,在将当前值为 null 的可以为 null 的类型赋值给不可以为 null 的类型时,将应用该默认值,如 int? x = null; int y = x ?? -1;
.不允许使用嵌套的可以为 null 的类型。 将不编译下面一行:Nullable<Nullable<int>> n;
Nullable<T> 结构支持
.对于一个类型,如果既可以给它分配一个值,也可以给它分配 null(表示没有任何值),我们就说这个类型是可空的。 默认情况下,所有引用类型,如 String,可以为空,但是,所有值类型,例如 Int32,不能为空。.在 C# 和 Visual Basic 中,可以通过使用 ? 表示方法在值类型之后标记一个值类型为空。 例如,int? 在 C# 中或 Integer? 在Visual Basic 中声明了可分配 null的整数值类型。
.Nullable<T> 结构支持只将一个值类型用作可以为 null 的类型,因为引用类型本身就是可空的。
.Nullable 类为 Nullable<T> 结构提供补充支持。 Nullable 类支持获取可以为 null 的类型的基础类型,对于其基础值类型不支持泛型比较和相等比较运算的可以为 null 的类型,该类支持对其进行比较和相等比较运算
参考:https://msdn.microsoft.com/zh-cn/library/6a71f45d
相关文章推荐
- 学习笔记---c#中的get与set学习
- C# 内存管理
- C# 内存管理
- C#:实现接口中定义的事件
- 使用SuspendLayout和ResumeLayout
- c# byte[] 与string转化
- C# FileSystemWatcher 在监控文件夹和文件时的用法
- 在C#中读写INI配置文件
- C# Attribute应用:类签名
- C#简单读取、改变文件的创建、修改及访问时间的方法
- C# 获得程序当前目录的方法
- C#.net实现在Winform中从internet下载文件的方法
- c#封装自己写的dll,和引用自己的dll
- C#获取excel中sheel名称
- .Net Stack 技术栈
- C#关键字列表
- C#运算符优先级
- 用C#写一个实现进程监控的自动关机工具
- c# select标签绑定枚举,并以Description做Text显示
- C#学习笔记(十五):预处理指令