新的元组语法在C#版本7

时间:2016-06-08 06:35:06

标签: c# visual-studio c#-7.0

我已经开始在Visual Studio Enterprise 15 Preview 2中尝试C#7的新功能。我能够运行其他即将推出的功能的代码,如二进制文字,数字分隔符等。但元组初始化的新语法不是工作

这是我的代码段:

var latLong = new (double lat, double lng) { lat = 0, lng = 0 };
var result = (5, 20);
var result = (count: 5, sum: 20);

我已按照this博客中提到的所有步骤进行操作。如果其他人也遇到过此问题,请发布此问题。上面的代码会导致编译失败,如下所示:

1>Program.cs(18,26,18,27): error CS1031: Type expected
1>Program.cs(18,27,18,33): error CS1525: Invalid expression term 'double'
1>Program.cs(18,34,18,37): error CS1003: Syntax error, ',' expected
1>Program.cs(18,39,18,45): error CS1525: Invalid expression term 'double'
1>Program.cs(18,46,18,49): error CS1003: Syntax error, ',' expected

2 个答案:

答案 0 :(得分:5)

我能够从另一个链接here中找到答案。如果您阅读评论部分,很明显并非所有即将推出的C#新功能都能够使其发布到已发布的VS 15版本。元组(具有新声明语法的值类型)就是这样一个特征。

在所有功能真正开始工作之前我们可能必须等待RTM构建或者另一种方法是从其gitHub存储库获取roslyn的最新源代码,在您自己的机器上克隆它,编译它并制作您的Visual Studio 15预览2安装以使用它。您将获得更多最新提交,您可以使用更多功能。

答案 1 :(得分:3)

您可以这样初始化:

void Main()
{
    var latLong = (lat:0, lng:0);
    var result1 = (5, 20);
    var result2 = (count: 5, sum: 20);
}

要试用它,一个选项是下载LinqPad V5.20.01的最新测试版,它已经支持C#7。要查看结果,请添加

latLong.Dump(); result1.Dump(); result2.Dump();

上面的例子。所有3个声明都创建为ValueTuple<Int32,Int32>。要创建其他数据类型,您需要将其指定为显式类型转换,例如

var latLong = (lat:(double)0.5, lng:(double)0);

将创建ValueTuple<Double,Double>。要分解元组,请使用

var (lat, lng) = latLong;

将创建并分配两个变量latlng。要了解更多C#7功能,请查看here.