下面是详细讲解C#中?
、?.
、??
、??=
运算符的用法:
?
运算符
?
运算符在C#中表示空值传播(Null Propagation),其作用是防止空引用异常(NullReferenceException)的发生,它的基本语法形式如下:obj?.PropertyName
。
当obj
不为null
时,?.
会直接返回obj.PropertyName
的值;当obj
为null
时,?.
会返回null
,不会抛出空引用异常。
下面是一个示例代码:
class Person {
public string Name { get; set; }
public House House { get; set; }
}
class House {
public string Address { get; set; }
}
Person person = null;
string address = person?.House?.Address; // address = null
在上面的示例中,person
为null
,如果我们直接访问person.House.Address
,则会抛出空引用异常,但是我们使用了person?.House?.Address
,这样即使person
为null
,代码也不会抛出异常,而是直接返回了null
。
?.
运算符
?.
运算符是?
运算符的简写形式,它在调用可空对象的方法、属性和索引器时非常有用,它的基本语法形式如下:obj?.MethodName()
、obj?.PropertyName
、array?[index]
。
当obj
不为null
时,?.
会直接调用obj
的方法、属性或索引器,并返回其结果;当obj
为null
时,?.
会返回null
,不会抛出空引用异常。
下面是一个示例代码:
string str = null;
int length = str?.Length ?? 0; // length = 0
在上面的示例中,str
为null
,如果我们直接调用str.Length
,则会抛出空引用异常,但是我们使用了str?.Length
,这样即使str
为null
,代码也不会抛出异常,而是直接返回了null
,另外我们使用??
运算符为null
设置了一个默认值。
??
运算符
??
运算符在C#中表示空合并运算符(Null Coalescing Operator),用于为一个null
值提供一个默认值,它的基本语法形式如下:obj1 ?? obj2
。
当obj1
不为null
时,??
直接返回obj1
的值;当obj1
为null
时,??
返回obj2
的值。
下面是一个示例代码:
int? num1 = null;
int num2 = num1 ?? 0; // num2 = 0
在上面的示例中,num1
为null
,我们使用了num1 ?? 0
,这样即使num1
为null
,代码也不会抛出异常,而是直接返回了0
。
??=
运算符
??=
运算符在C#8.0中引入,它可以将一个值赋给一个可空类型的变量,当变量的值为null
时,才会进行赋值操作,它的基本语法形式如下:obj1 ??= obj2
。
当obj1
不为null
时,??=
不做任何操作;当obj1
为null
时,??=
会将obj2
的值赋给obj1
。
下面是一个示例代码:
int? num1 = null;
num1 ??= 10; // num1 = 10
在上面的示例中,num1
为null
,我们使用了num1 ??= 10
,这样num1
的值就被赋为10
。
总结一下,?
、?.
、??
、??=
运算符分别表示空值传播、空值传播简写、空合并和空合并赋值,它们可以帮我们简化代码,避免空引用异常的发生。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中?、?.、??、??=运算符的用法 - Python技术站