2017-05-08 12 views
4

C#7の新しいタプル機能では、型から派生した名前でフィールドにアクセスできるはずです。C#7 .NETコアのタプルと名前

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

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

これは.NETコアでは不可能です。どうして? - >Item1のみで動作します。 Item2。 .lat .lngではありません。

おかげ

+0

ですそれのためのナゲットパッケージ? https://www.nuget.org/packages/System.ValueTuple/ –

+0

.NETコアでこれを行うことが最も確実です。タプルの名前を使用するとき、あなたのコードは '$" Lat:{ll.Item1}、Long:{ll.Item2} "でコンパイルされますか?これは起こりそうにないようですが、あなたがあなたの質問を暗示するものです。もう少し情報が必要です。 –

+0

Item1とItem2の名前がタプルのために働いていて、名前が.latや.lngではないと書いてあります。 –

答えて

4

UPDATE

のVisual Studio 2017 IntelliSenseが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自動的Options > Text Editor > C# > Advanced > Using Directivesの設定を有効にすることで、不足しているタイプのためのNuGetパッケージを提案するVisual Studioの2017を設定する方法。

あなたが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

まず、スニペットはパッケージを追加する限り機能します。だからコンパイラ*は名前を認識します。次に、「コンパイラによって提案されていない」ことは何ですか?コンパイラは何も提案しません。インテリセンスに名前が表示されないということですか? –

+0

私はVSを再起動しなければならなかった...いいえコメント:) –

関連する問題