【C#】-弃元(_)的使用

从 C# 7.0 开始,C# 支持弃元,这是一种在应用程序代码中人为取消使用的占位符变量。

简单来说,弃元的作用就是告诉编译器和其他读取代码的文件你打算忽略表达式的结果。当我们不需要或不使用赋值的结果时,就可以使用弃元。

我们在代码中一定遇到过这种苦恼:

static void Main(string[] args)
{
string val = "123";
if (int.TryParse(val,out int t1))
{
Console.WriteLine("int类型");
}
}
此时,我们并不需要使用到返回的值,但是方法又规定必须传递out的值,此时,我们就可以这样实现代码:

static void Main(string[] args)
{
string val = "123";
if (int.TryParse(val,out _))
{
Console.WriteLine("int类型");
}
}
除了out之外,我们还可以在元组和对象析构、witch等语句中使用弃元写出优雅代码

例如,下面的例子我们只希望使用到日期中的年份。

var (year,_,_) = GetDate();

private (string,string,string) GetDate()
{
//...
return (year,month,day);
}
例如,我们在switch的模式匹配中不期望对指定类型的对象进行使用。

Foo("10");

void Foo(object item)
{
switch (item)
{
case int val:
Console.WriteLine(val);
break;
case string _:
Console.WriteLine("Error");
break;
}
}
例如,我们使用独立弃元抛出错误。

public static void Method(string arg)
{
_ = arg ?? throw new ArgumentNullException(paramName: nameof(arg), message: "arg can't be null");

// Do work with arg.
}
但是,我们在使用弃元的时候也需要注意,当_被当作有效变量时,则不能使用弃元。例如:

private static void ShowValue(int _)
{
byte[] arr = { 0, 0, 1, 2 };
_ = BitConverter.ToInt32(arr, 0);
Console.WriteLine(_);
}
// The example displays the following output:
// 33619968
从 C# 9.0 开始,可以使用弃元指定 lambda 表达式中不使用的两个或更多输入参数:

Func<int, int, int> constant = (_, _) => 42;
注意:为了向后兼容,如果只有一个输入参数命名为 _,则在 lambda 表达式中,_ 将被视为该参数的名称。

使用弃元好处:

使代码意图更加明确。增强其可读性和可维护性。
节省内存空间,当 _ 是有效弃元时,并不会分配内存。
————————————————
版权声明:本文为CSDN博主「丿灬鑫崽丶」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_38037668/article/details/125159169

posted @ 2023-05-26 13:05  VisionCode  阅读(176)  评论(0编辑  收藏  举报