在 C# .NET 中丢弃变量

作者:微信公众号:【架构师老卢】
7-11 18:39
29

概述:在 C# 中,discard 变量(下划线)是 C# 7.0 中引入的特殊语法。丢弃是应用程序代码中有意不使用的占位符变量。它们等同于未赋值的变量,不具有任何值。您可以通过使用下划线 (_) 来命名变量来指示该变量是丢弃变量。在这里,我们将讨论在日常开发活动中丢弃变量的几个用例,但根据具体场景的不同,还有更多用例:忽略返回值如果某个方法返回了您不需要的值,则可以使用 discard 变量 (_) 来忽略它。bool ValidateMemberAge() {     return isValid; } _ = ValidateMemberAge();在开关表达式中使用在 switc

在 C# 中,discard 变量(下划线)是 C# 7.0 中引入的特殊语法。丢弃是应用程序代码中有意不使用的占位符变量。它们等同于未赋值的变量,不具有任何值。

您可以通过使用下划线 (_) 来命名变量来指示该变量是丢弃变量。

在这里,我们将讨论在日常开发活动中丢弃变量的几个用例,但根据具体场景的不同,还有更多用例:

忽略返回值

如果某个方法返回了您不需要的值,则可以使用 discard 变量 (_) 来忽略它。

bool ValidateMemberAge()  
{  
    return isValid;  
}  
  
_ = ValidateMemberAge();

在开关表达式中使用

在 switch 表达式中,discard 变量 (_) 可用于处理默认情况。

int memberGroup = 5;  
string result = number switch  
{  
    1 => "Gold",  
    2 => "Silver",  
    _ => "Other"  
};  
Console.WriteLine(result);  // Output: Other

忽略任务结果

当任务结果的值不需要使用 discard 变量 (_) 进行进一步处理时,可以丢弃任务结果。

 internal async Task LongRunningTask()  
 {  
     _ = Task.Run(() =>  
     {  
         //Long running operation...  
     });  
  
     await GetOrderByID(Guid.NewGuid());  
 }

忽略元组元素

使用元组时,可以使用 discard 变量 (_) 忽略不需要的元素。

var (name, _, _, dateOfBirth) = GetMemberInfo("21024000129");  
Console.WriteLine($"Name: {name}, DateOfBirth: {dateOfBirth}");

丢弃参数

使用带参数的方法时,可能不需要所有参数。您可以使用 discard 变量 (_) 来忽略不需要的变量。

if (SampleMethod("test", out string statusCode, out _))  
{  
    Console.WriteLine($"Status Code is: {statusCode}");  
}

模式匹配

在模式匹配中,您可以使用丢弃 (_) 来忽略您不关心的模式部分。

if (person is Employee { Department: _ })  
{  
    Console.WriteLine("This person is an employee.");  
}

在 LINQ 查询中放弃值

使用 LINQ 时,可以使用丢弃变量 (_) 来忽略投影中的某些值。

var numbers = new[] { 8, 15, 28, 60, 93 };  
var query = numbers.Select((number, index) => (index, number, number % 2 == 0));  
  
//ignoring number index  
foreach (var (_, number, IsEven) in query)  
{  
    Console.WriteLine($"{number} is even:{IsEven}");  
}  
  
Console.ReadLine();

输出

使用 null 合并运算符 (??)

当参数为 null 时,赋值的右侧使用 null 合并运算符来抛出 a。该代码不需要赋值的结果,因此将被丢弃。此表达式可确保 null 检查。使用 discard 阐明了不需要或使用赋值结果的意图。

_ = arg ?? throw new ArgumentNullException(paramName: nameof(arg), message: "arg can't be null");

此示例适用于旧版本的 .NET。在较新的版本中,我们有一种更简化的方法来使用该方法处理参数 null 异常。

阅读排行