2KB项目,专业的源码交易网站 帮助 收藏 每日签到

C# 7.0 : 将元组发挥到极致!

  • 时间:2019-01-23 18:27 编辑:2KB 来源:2KB.COM 阅读:320
  • 扫一扫,手机访问
  • 分享
摘要: 英文原文:C#
英文原文:C# 7.0 : Tuples to the Extreme!

元组是许多开发人员可能不经常在日常工作中用到的东西,但是他们有几个不同的用途。随着最新的即将发布的C#的到来,这个现象可能会改变,因为元组作为主要的扩充,将可能在现实世界中得到更多的应用。

什么是元组?

下面看看MSDN的描述:

元组是具有特定数列和元素序列的数据结构。例如,使用一个包含三个元素的元组(叫做三元组)来保存一个人的特征,第一个元素保存人的姓名,第二个元素保存生日,第三个元素保存这个人的一年的收入。

更通俗的说,你可以将他视为一个不含任何实际属性的类,或者由于你懒于创建一个类去实现一些行为而用于替代的东西。

其它翻译版本 (1) 加载中

举例来说,假设你要创建一个类来存储城市/州组合你可以这样传递:

public class Location  
{     public string City { get; set; }     public string State { get; set; }     public Location(string city, string state)
     {
           City = city;
           State = state;
     }
}// Examplevar location = new Location("Lake Charles","LA");  
// Print out the addressvar address = $"{location.City}, {location.State}";

你可以用一个元组做同样的事情,但是显然少了很多描述性的东西:

var location = new Tuple<string,string>("Lake Charles","LA");  
// Print out the addressvar address = $"{location.Item1}, {location.Item2}";

所以在某些场景中,尤其是应急的时候,元组对象就会很有用。MSDN 有一些 常用的用例,你可能会希望看一下。


那么,在C# 7.0中元组有什么新的改变?


好吧,C# 7.0引入了一个新的特性,少量开发者已经提问的:多个返回值

没错,你可以书写类似如下的代码而无需创建一个类,仅仅是使用一个元组类型,或者一系列的ref或out参数即可实现:

public (string city, string state) GetCityAndState()  
{    return ("Lake Charles","Louisiana");
}

这允许你调用单个方法,并通过他们定义的名称访问每个返回值,如下所示:

var result = GetCityAndState();  
var city = result.city;  // 得到"Lake Charles"  
var state = result.state // 得到"Louisiana"

这些多个返回值方法的结果也可以根据你的需求以各种方式重建:

// 使用两个明确定义的返回值
(string city, string state) = GetCityAndState();
// 使用var而不是现实类型定义
(var city, var state) = GetCityAndState();
// 对多个变量使用单个var声明
var (city, state) = GetCityAndState();  
// 使用现有变量
(city,state) = GetCityAndState();

通过想象,你可以初始化元组使用下面类似的语句完成:

var location = ("Lake Charles", "Louisiana");

这是一个其他主流编程语言如Python, Scala, Ruby, Go和其他语言都已经拥有的一个特性,所以希望他对C#也是一个很好的补充。

帅呆了。还有其他的吗?

除了上文提供的直接示例之外,这些新的ValueTuple对象可以使用类型推断去匹配返回的值的类型来保证他是有效的,如下面的例子:

public (string city, int population) FindBiggestCityWithPopulation(string state)  
{
    var result = (city: "", population: 0);
    result.city = _someService.GetBiggestCity(state);
    result.population = _someService.GetPopulation(result.city);    return result;
}

同样的,这些新的元组也支持async/await模式:

public async Task(string bird, string flower) GetStateBirdAndFlowerAsync(string state)  
{
    var bird = await _someService.GetStateBirdAsync(state);
    var flower = await _someService.GetStateFlower(state);    return (bird,flower);
}

看看这是怎么回事。

“新的”微软开发生态系统一个奇妙的东西就是他很开放。不再是在充满烟味的房间里独自决定重要的发展决定,而是在GitHub上公开问题。

如果你想看看导致这个功能的谈话的话,你可以点击此处访问多个返回值的提案。你也可以考虑通过其他活动问题来了解什么功能可能会即将推出。

CodeProject

License

本文以及任何相关的源代码和文件均以获得The Code Project Open License (CPOL)许可。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部