在C#中,`_ =` 是一种使用未赋值变量的模式,通常与 `out` 参数或 `discard` 一起使用。
1. `out` 参数
在C# 7.0及以后的版本中,当你调用一个方法并且不想使用它的所有 `out` 参数时,可以使用 `_` 来忽略特定的 `out` 值。这在调用某些需要多个 `out` 参数但只对其中一些参数感兴趣的方法时非常有用。
例如,考虑以下方法,它返回一个布尔值并有两个 `out` 参数:
```csharp
(bool success, int number, string message) TryGetNumberAndMessage(out int number, out string message);
```
如果你只关心 `success` 和 `message`,可以这样调用:
```csharp
if (TryGetNumberAndMessage(out _, out string message))
{
Console.WriteLine($"Success with message: {message}");
}
```
在这里,`out _` 表示我们不关心 `number` 参数的值。
2. Discard
C# 7.0引入了一个新的概念叫做 "discard",它是一个只读的只用于赋值的变量。它用于当你需要从方法调用中丢弃一个值,但仍然需要提供一个变量来接收它。
例如,当你调用一个返回元组的方法,并且只对元组中的某些元素感兴趣时:
```csharp
(string name, int age) GetPersonInfo();
```
你可以这样使用丢弃的变量:
```csharp
var person = GetPersonInfo();
Console.WriteLine($"Name: {person.name}, Age: {person.age}");
```
在这个例子中,`person` 是一个元组,我们可以直接访问它的属性,但我们没有使用 `_`。
如果我们只对 `name` 感兴趣,可以这样写:
```csharp
(_, string name) = GetPersonInfo();
Console.WriteLine($"Name: {name}");
```
在这里,第一个元素被丢弃,我们只接收了 `name`。
注意事项
- `_` 不是一个有效的变量名,不能用于常规变量声明或赋值。
- `_` 仅用于 `out` 参数或丢弃的变量,以简化代码并避免不必要的变量声明。
这种语法是C#语言中一种优雅的方式来处理不需要的值,使代码更加简洁和清晰。