前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2019-2-24-2019-2-24-C#中的弃元

2019-2-24-2019-2-24-C#中的弃元

作者头像
黄腾霄
发布2020-06-10 11:53:16
4790
发布2020-06-10 11:53:16
举报
文章被收录于专栏:黄腾霄的博客

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


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

代码语言:javascript
复制
var dict = new ConcurrentDictionary<int,int>
dict[]=;
var result = dict.TryRemove(, out var value);
Console.WriteLine(result);

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

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

代码语言:javascript
复制
var dict = new ConcurrentDictionary<int,int>();
dict[1]=1;
var result = dict.TryRemove(1,out _);
Console.WriteLine(result);

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

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

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

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

代码语言:javascript
复制
var (year,_,_) = GetDate();

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

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

代码语言:javascript
复制
Foo("10");

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

参考链接:


本文会经常更新,请阅读原文: https://xinyuehtx.github.io/post/C-%E4%B8%AD%E7%9A%84%E5%BC%83%E5%85%83.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名黄腾霄(包含链接: https://xinyuehtx.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-02-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档