Skip to content

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

使用过ConcurrentDictionary<T,T>的同学肯定经历过这样的痛苦

c#
var dict = new ConcurrentDictionary<int,int>
dict[1]=1;
var result = dict.TryRemove(1, out var value);
Console.WriteLine(result);

我明明没有用到字典中删除的值,但是还是非要将这个值赋给某个变量。

有了弃元之后,你就可以写出这样的代码

C#
var dict = new ConcurrentDictionary<int,int>();
dict[1]=1;
var result = dict.TryRemove(1,out _);
Console.WriteLine(result);

我们看到,不但没有变量赋值,连类型声明都不需要了,代替的只是使用了一个下划线_

当然弃元不只是书写和语义上的提升,它还可以减少内存分配

除了out参数,我们还可以再元组析构,switch等语句中使用弃元写出优雅代码

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

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

private (string,string,string) GetDate()
{
	//...
    return (year,month,day);
}

例如,我们在switch的模式匹配中不期望对指定类型的对象进行使用

c#
Foo("10");

void Foo(object item)
{
	switch (item)
	{
	     case int val:
             Console.WriteLine(val);
	         break;
	     case string _:
	         Console.WriteLine("Error");
	         break;
	}
}

参考链接:

最后更新于:

基于 VitePress + @sugarat/theme 构建