2016-06-08 25 views
4

我已经开始尝试Visual Studio Enterprise 15 Preview 2中C#7的新功能。我可以运行其他即将发布的功能的代码,如二进制文字,数字分隔符等。但是,元组初始化的新语法不起作用。新的元组语法在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 

回答

5

我能够从另一个链接here摸不着头脑。如果你仔细阅读了评论部分,很明显并不是C#的所有即将推出的新特性都能够使它持续发布已发布的VS 15版本。元组(具有新声明语法的值类型)就是这样一个特征。

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

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.

相关问题