在 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 时,可以使用丢弃变量 (_) 来忽略投影中的某些值。
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 合并运算符来抛出 a。该代码不需要赋值的结果,因此将被丢弃。此表达式可确保 null 检查。使用 discard 阐明了不需要或使用赋值结果的意图。
_ = arg ?? throw new ArgumentNullException(paramName: nameof(arg), message: "arg can't be null");
此示例适用于旧版本的 .NET。在较新的版本中,我们有一种更简化的方法来使用该方法处理参数 null 异常。