C#7 .NET Core中的元组和名称

Ond*_*cik 8 c# .net-core c#-7.0

使用C#7新的Tuple特性,我们应该能够通过它从类型派生的名称来访问字段.

public (double lat, double lng) GetLatLng(string address) { ... }

var ll = GetLatLng("some address"); 
Console.WriteLine($"Lat: {ll.lat}, Long: {ll.lng}");
Run Code Online (Sandbox Code Playgroud)

这在.NET Core中是不可能的.为什么?- > 仅适用于Item1; 项目2.不是.lat .lng.

谢谢

Pan*_*vos 8

UPDATE

添加System.ValueTuple软件包后,Visual Studio 2017 Intellisense可能很慢更新自身,即使没有编译错误,也会继续显示错误波形.编译项目虽然表明命名元组正在工作.快速解决方法是重新打开源文件或解决方案.

原版的

错误消息说明了"预定义类型" System.ValueTuple'2 is not defined or imported.您需要从NuGet 添加System.ValueTuple包才能使用命名元组.

添加包后,代码将编译:

class Program
{
    static (double lat, double lng) GetLatLng(string address)
    {
        return (1, 1);
    }
    static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");

        var ll = GetLatLng("some address");
        Console.WriteLine($"Lat: {ll.lat}, Long: {ll.lng}");
    }
}
Run Code Online (Sandbox Code Playgroud)

Scott Hanselman演示了如何通过启用设置来配置Visual Studio 2017以自动建议缺少类型的NuGet包Options > Text Editor > C# > Advanced > Using Directives.

启用该Suggest usings for types in NuGet packages设置后,缺少元组的"快速修复"菜单显示Install package 'System.ValueTuple':

安装缺少的包

Find this type on nuget.org菜单是一个类似ReSharper的功能

  • 首先,只要您添加包,代码段就会起作用.所以编译器*会识别名称.第二,"编译器没有提出"是什么?编译器没有提出任何建议.你是说intellisense没有显示名字? (2认同)