我已经开始在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
答案 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;
将创建并分配两个变量lat
和lng
。要了解更多C#7功能,请查看here.