Null操作符
C#提供了两种操作符,它们可以更容易的处理null
Null合并操作符
符号为??
如果操作符不是null,那么把它给我;否则的话,给我一个默认值
如果左边的表达式非null,那么??右边的表达式就不会被计算
static void Main()
{
string s1 = null;
string s2 = s1 ?? "nothing";
System.Console.WriteLine(s2); // print: nothing
string s3 = "something";
string s4 = s3 ?? "nothing"; // 如果左边不为null右边直接不会被计算
System.Console.WriteLine(s4); // print: something
}
Null条件操作符(Elvis)
C#6中出现的用法 ?.
允许你像.操作符那样调用方法或访问成员,除非当左边的操作符数是null的时候,那么整个表达式就是null,而不会抛出NullReferenceException
一旦遇到null,这个操作符就把剩余表达式给短路掉了
static void Main()
{
System.Text.StringBuilder sb = null;
string s = sb.ToString(); // 会抛出System.NullReferenceException
string s1 = sb?.ToString();// 相当于下面这行代码
string s2 = (sb == null ? null : sb.ToString());
}
Null条件操作符
最终表达式必须可以接受null
可以和null合并操作符一起使用
static void Main()
{
System.Text.StringBuilder sb = null;
// ↓ 会报错 无法将null赋值给int类型
int length = sb?.ToString().Length;
// 如果是可空int类型就可以接受赋值
int? length2 = sb?.ToString().Length;
}
合并使用两种操作符的例子
static void Main()
{
System.Text.StringBuilder sb = null;
string s = sb?.ToString() ?? "nothing";
System.Console.WriteLine(s); // print: nothing
}