web-dev-qa-db-ja.com

C#7 .NETCoreのタプルと名前

C#7の新しいタプル機能を使用すると、型から派生した名前でフィールドにアクセスできるようになります。

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

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

これは.NETCoreでは不可能です。どうして? -> Item1でのみ機能します;Item2。lat.lngでは機能しません

ありがとう

9
Ondrej Tomcik

[〜#〜]更新[〜#〜]

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が示していますOptions > Text Editor > C# > Advanced > Using Directivesの設定を有効にして、不足しているタイプのNuGetパッケージを自動的に提案するようにVisual Studio2017を構成する方法。

Suggest usings for types in NuGet packages設定を有効にすると、欠落しているタプルのクイック修正メニューにInstall package 'System.ValueTuple'が表示されます。

Install missing package

Find this type on nuget.orgメニューは同様のReSharper機能です

8