从 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;
}
}参考链接: