2017-05-08 12 views
4

使用C#7的新元组功能,我们应该可以通过从类型派生的名称来访问字段。C#7 .NET Core中的元组和名称

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

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

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

感谢

+0

它可能是你需要添加nuget包吗? https://www.nuget.org/packages/System.ValueTuple/ –

+0

它绝对可以用.NET Core来做到这一点。您的代码是否使用'$“Lat:{ll.Item1},Long:{ll.Item2}”'进行编译,但在使用元组名时不能使用?这似乎不大可能,但是你暗示你的问题。需要更多信息。 –

+0

我写过Item1和Item2的名字都适用于元组,命名字段如.lat和.lng不是。 –

回答

4

UPDATE

的Visual Studio 2017的智能感知可能是缓慢的加入System.ValueTuple包后进行自我更新,并持续显示错误squigglies即使没有编译错误。编译该项目虽然显示名称元组工作。快速修复是重新打开源文件或解决方案。

ORIGINAL

错误消息说明“预定义类型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年将自动提示的NuGet包在Options > Text Editor > C# > Advanced > Using Directives使设置缺少的类型。

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

Install missing package

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

+0

我没有错误消息的问题,我安装了System.ValueTuple软件包并且元组正在正常工作。问题在于名称,这是编译器本身没有提出的。仍然只提议Item1 ... –

+2

首先,只要您添加软件包,代码段就会工作。所以编译器*会识别这些名称。其次,“编译器没有提出什么”?编译器不会提出任何建议。你的意思是intellisense不显示名字? –

+0

我不得不重新启动VS ...无评论:) –