从 C# 7.0 开始,C# 支持弃元,这是一种在应用程序代码中人为取消使用的临时虚拟变量。
使用过ConcurrentDictionary<T,T>
的同学肯定经历过这样的痛苦
var dict = new ConcurrentDictionary<int,int>
dict[1]=1;
var result = dict.TryRemove(1, out var value);
Console.WriteLine(result);
我明明没有用到字典中删除的值,但是还是非要将这个值赋给某个变量。
有了弃元之后,你就可以写出这样的代码
var dict = new ConcurrentDictionary<int,int>();
dict[1]=1;
var result = dict.TryRemove(1,out _);
Console.WriteLine(result);
我们看到,不但没有变量赋值,连类型声明都不需要了,代替的只是使用了一个下划线_
当然弃元不只是书写和语义上的提升,它还可以减少内存分配。
除了out
参数,我们还可以再元组析构,switch
等语句中使用弃元写出优雅代码
例如,下面的例子我们只希望使用到日期中的年份
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;
}
}
参考链接:
本文会经常更新,请阅读原文: https://dotnet-campus.github.io//post/C-%E4%B8%AD%E7%9A%84%E5%BC%83%E5%85%83.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 dotnet 职业技术学院 (包含链接: https://dotnet-campus.github.io/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 。