弃元符号是什么

弃元符号在C#中只是一个下划线 _,当程序员不想关注某些变量的时候,可以使用这个符号。

用法一:忽略方法的返回值

当C#中某个方法有返回值,但是这个返回值对程序来说没有用处,同时不想在后面的代码中使用这个变量的时候,可以使用弃元符号放弃这变量。

_ = Method1();     

用法二:忽略异步方法的返回值

当程序中有异步方法的时候,一般都需要await关键字。但是如果希望程序以异步方式运行,就可以不写关键字。不过这个时候vs编译器会直接警告,这个时候通过弃元符号就可以放弃这个返回值,并且消除编译器的警告,下面是两种写法,一种是直接忽略Task.Run()方法的返回值,一种是忽略异步方法的返回值。其实第二种写法和用法一的忽略方法返回值是类似的。

_ = Task.Run(() =>
{
   Console.WriteLine("这是一个异步方法");
});
_ = MethodAsync();

用法三:忽略元组的返回值

当方法的返回值是元组的时候,元组中有多个变量,如果只用到元组中的个别变量,就可以通过弃元符号放弃其他元组变量。下面的代码中有一个方法GetTuple返回四个变量,但是在调用这个方法的时候,调用方只接受了第一个参数a,其他三个参数通过弃元符号忽略掉。


var (a, _, _, _) = GetTuple();
static (int a, int b, int c, int d) GetTuple()
{
return (1, 2, 3, 4);
}

用法四:忽略out返回值

bool result = int.TryParse("123", out _);

用法五:独立弃元 ??

通过下面这种方式可以用一行代码直接对空引用的字符串抛出异常,并且必须要有弃元符号,否则arg ?? throw new Exception("arg not null"); 这个表达式是无法单独编译通过的。这在C#中叫做独立弃元。

string arg = string.Empty
_ = arg ?? throw new Exception("arg not null");

用法五:switch 里面的默认值忽略

下面的代码通过在switch中,当前吗的case选项都无法匹配的时候,就会使用最后面弃元符号表示的默认值。

string weekStr = "星期一是的是的 ";
int week = weekStr switch
    {
        "星期一" => 1,
         "星期二" => 2,
         _ => -1
    };