编辑
2025-02-03
C# 应用
00
请注意,本文编写于 92 天前,最后修改于 92 天前,其中某些信息可能已经过时。

目录

什么是Discard变量?
Discard变量的特点
使用场景和示例
1. 解构元组
2. 模式匹配
3. out参数
4. LINQ查询
5. 异步方法
注意事项
结论

这个以前基本没用过,突然发现在同事代码中有这个,一了解,这个老早就出了,还是老了,好多东西习惯了,这个其实是C# 7.0就引入了。这个特性可以帮助开发者编写更简洁、更易读的代码。本文将深入探讨discard变量的概念、特点以及在各种场景下的应用。

什么是Discard变量?

Discard变量是一种特殊的只读变量,用下划线(_)表示。它的主要用途是表示我们不关心某个值,可以安全地忽略它。使用discard变量可以避免创建不必要的临时变量,从而使代码更加清晰。

Discard变量的特点

  1. 使用下划线(_)表示
  2. 只读变量,不能被赋值
  3. 可以在同一个作用域内多次使用
  4. 编译器会忽略discard变量,不会为其分配存储空间

使用场景和示例

1. 解构元组

当使用元组时,我们可能只需要其中的部分值。这时,discard变量就派上用场了。

C#
static void Main(string[] args) { var (_, lastName, age) = GetPersonInfo(); Console.WriteLine($"Name: {lastName}, Age: {age}"); } static (string, string, int) GetPersonInfo() { return ("John", "Doe", 30); }

image.png 在这个例子中,我们只关心姓氏和年龄,因此使用discard变量忽略了名字。

2. 模式匹配

Discard变量在模式匹配中也非常有用,特别是当我们只关心对象的某些属性时。

C#
internal class Program { static void Main(string[] args) { object obj = new Person { FirstName = "Alice", LastName = "Smith", Age = 25 }; if (obj is Person { LastName: var lastName, Age: _ }) { Console.WriteLine($"Last name: {lastName}"); } } } public class Person { public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } }

image.png

这里我们只关心LastName,而忽略了Age

3. out参数

当方法有多个out参数,但我们只需要其中一部分时,可以使用discard变量。

C#
if (int.TryParse("123", out int result)) { Console.WriteLine($"Parsed value: {result}"); } // 使用discard变量 if (int.TryParse("123", out _)) { Console.WriteLine("Parsing successful"); }

image.png

在第二个例子中,我们只关心解析是否成功,而不需要实际的解析结果。

4. LINQ查询

在LINQ查询中,discard变量可以用来忽略不需要的值。

C#
var numbers = new[] { 1, 2, 3, 4, 5 }; var evenNumbers = numbers.Select((n, _) => n) .Where(n => n % 2 == 0); foreach (var num in evenNumbers) { Console.WriteLine(num); }

Select 方法用于投影数组中的每个元素。虽然这里使用了 Select 方法,但其实它并没有对元素进行任何改变,只是简单地返回了每个元素 n。在这个例子里,匿名函数的第二个参数 _ 代表元素的索引,但没有实际使用它。

image.png

这里我们使用discard变量忽略了Select方法中的索引参数。

5. 异步方法

在异步编程中,如果我们不关心异步操作的结果,可以使用discard变量。

C#
using System; using System.Threading.Tasks; class Program { public static async Task PerformLengthyOperationAsync() { await Task.Delay(10000); // 模拟一些耗时操作 // 忽略返回值 } public static async Task MainAsync() { _ = PerformLengthyOperationAsync(); // 使用 discard 变量忽略返回值 Console.WriteLine("Continuing execution without waiting for the lengthy operation to complete"); // 可以在这里继续执行其他代码 } static void Main(string[] args) { MainAsync().GetAwaiter().GetResult(); // 这是为了让 Main 方法支持异步调用 } }

这个例子展示了如何使用 discard 变量来忽略异步方法的返回值,允许代码继续执行而无需等待异步操作完成。 其中 Main 方法使用 GetAwaiter().GetResult() 来调用异步方法 MainAsync,确保控制台应用程序入口点可以处理异步逻辑。

注意事项

虽然discard变量很有用,但也要注意以下几点:

  1. 不要过度使用,可能会影响代码的可读性
  2. 在需要调试的场景中,可能会增加调试难度
  3. 确保使用discard变量不会忽略重要的错误检查或必要的处理逻辑

结论

C# 7.0中引入的discard变量是一个简单但强大的特性。它可以帮助开发者编写更简洁、更易读的代码,特别是在处理不需要的值时。通过本文的示例,我们看到了discard变量在解构元组、模式匹配、out参数、LINQ查询和异步编程等多个场景中的应用。合理使用discard变量,可以显著提高代码的可读性和维护性。

希望这篇文章对您有所帮助,让您更好地理解和使用C# 7.0中的discard变量特性。

本文作者:rick

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!