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

C# 7 Tuples and names in .NET Core

使用 C# 7 的新元组功能,我们应该能够通过从类型派生的名称访问字段。

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

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

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

谢谢

更新

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

原版

错误消息解释为“预定义类型 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}");
    }
}

Scott Hanselman shows 如何配置 Visual Studio 2017 以通过启用 Options > Text Editor > C# > Advanced > Using Directives 中的设置自动建议缺失类型的 NuGet 包。

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

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