新的元组语法在 C# 版本 7 中不起作用

New tuple syntax not working in C# version 7

我已经开始在 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

我是从另一个 link here 那里弄明白的。如果您通读评论部分,很明显并非所有即将推出的 C# 新功能都能够在发布的最后一个 VS 15 版本中实现。元组(具有新声明语法的值类型)就是这样一种特性。

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

你可以这样初始化它:

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

要尝试,您可以使用 fiddle(此答案底部的 link),或离线使用 LinqPad tool,两者都已经支持 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.

Try out examples with DotNetFiddle