C#中的? 、?. 、?? 、??=
时间: 2023-12-15 11:32:35 浏览: 25
在C#中,?、?.、??、??=都是一些特殊的运算符,用于处理空引用和空值的情况。
1. ? 运算符:它可以用于判断一个对象是否为空,如果为空则返回null,否则返回对象本身。例如:
```
string str = null;
string result = str?.ToString(); // result为null
```
2. ?. 运算符:它可以用于访问一个对象的属性或方法,如果对象为空则返回null,否则返回属性或方法的值。例如:
```
string str = null;
int? length = str?.Length; // length为null
```
3. ?? 运算符:它可以用于判断一个对象是否为空,如果为空则返回默认值,否则返回对象本身。例如:
```
string str = null;
string result = str ?? "default"; // result为"default"
```
4. ??= 运算符:它可以用于判断一个对象是否为空,如果为空则将默认值赋给对象,否则不做任何操作。例如:
```
string str = null;
str ??= "default"; // str被赋值为"default"
```
相关问题
c# ??和??=的例子
以下是C#中 ?? 和 ??= 运算符的例子:
1. ?? 运算符的例子:
```csharp
string str1 = null;
string str2 = str1 ?? "default value";
Console.WriteLine(str2); // 输出 "default value"
string str3 = "C#";
string str4 = str3 ?? "default value";
Console.WriteLine(str4); // 输出 "C#"
```
上述代码中,第一个例子中 str1 为 null,所以使用 ?? 运算符返回了默认值 "default value";第二个例子中 str3 不为 null,所以返回了原始值 "C#"。
2. ??= 运算符的例子:
```csharp
int? num1 = null;
num1 ??= 10;
Console.WriteLine(num1); // 输出 10
int? num2 = 20;
num2 ??= 10;
Console.WriteLine(num2); // 输出 20
```
上述代码中,第一个例子中 num1 为 null,所以使用 ??= 运算符将 num1 赋值为 10;第二个例子中 num2 不为 null,所以不会执行赋值操作,num2 的值仍为 20。
c# 操作符 ??=
C# 操作符 `??=` 是一个复合赋值运算符,用于将左侧的可空类型变量赋值给右侧的表达式,如果左侧的变量为 null,则将右侧的表达式的值赋值给左侧的变量。这个操作符的语法如下:
```
nullableVariable ??= expression;
```
其中,`nullableVariable` 是一个可空类型的变量,`expression` 是一个表达式。如果 `nullableVariable` 为 null,则将 `expression` 的值赋值给 `nullableVariable`,否则不执行任何操作。
例如,假设有一个可空类型的 int 变量 `x`,我们可以使用 `??=` 操作符来将其初始化为一个默认值:
```
int? x = null;
x ??= 0; // 如果 x 为 null,则将其赋值为 0
```
在上面的例子中,如果 `x` 为 null,则将其赋值为 0,否则不执行任何操作。