当前位置: 欣欣网 > 码农

揭秘:C#语法中「_ =」 是什么?

2024-06-22码农

在C#中,`_ =` 是一种使用未赋值变量的模式,通常与 `out` 参数或 `discard` 一起使用。


1. `out` 参数
在C# 7.0及以后的版本中,当你调用一个方法并且不想使用它的所有 `out` 参数时,可以使用 `_` 来忽略特定的 `out` 值。这在调用某些需要多个 `out` 参数但只对其中一些参数感兴趣的方法时非常有用。
例如,考虑以下方法,它返回一个布尔值并有两个 `out` 参数:

```csharp(bool success, int number, string message) TryGetNumberAndMessage(outint number, outstring message);```如果你只关心 `success` 和 `message`,可以这样调用:```csharpif (TryGetNumberAndMessage(out _, outstring message)){ Console.WriteLine($"Success with message: {message}");}```

在这里,`out _` 表示我们不关心 `number` 参数的值。
2. Discard
C# 7.0引入了一个新的概念叫做 "discard",它是一个只读的只用于赋值的变量。它用于当你需要从方法调用中丢弃一个值,但仍然需要提供一个变量来接收它。
例如,当你调用一个返回元组的方法,并且只对元组中的某些元素感兴趣时:

```csharp(string name, int age) GetPersonInfo();```你可以这样使用丢弃的变量:```csharpvar person = GetPersonInfo();Console.WriteLine($"Name: {person.name}, Age: {person.age}");```

在这个例子中,`person` 是一个元组,我们可以直接访问它的属性,但我们没有使用 `_`。
如果我们只对 `name` 感兴趣,可以这样写:

```csharp(_, string name) = GetPersonInfo();Console.WriteLine($"Name: {name}");```

在这里,第一个元素被丢弃,我们只接收了 `name`。
注意事项
- `_` 不是一个有效的变量名,不能用于常规变量声明或赋值。
- `_` 仅用于 `out` 参数或丢弃的变量,以简化代码并避免不必要的变量声明。
这种语法是C#语言中一种优雅的方式来处理不需要的值,使代码更加简洁和清晰。