English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C#7.0(.NET Framework 4.7)がValueTuple構造を導入しました。これはタプルの値型表現です。
ValueTupleは.NET Framework 4.7で利用可能です。プロジェクトにValueTupleが見当たらなければ、ValueTupleをインストールする必要があります。(.NET Framework 4.7またはより高いバージョン、または.NET Standard Library 2.0またはそれ以降のバージョンがValueTupleを含んでいます。)
ValueTupleパッケージをインストールするには、ソリューションエキスプローラーでプロジェクトを右クリックして、Manage NuGet Packages..をクリックします。これにより、NuGetパッケージマネージャーが開かれます。ブラウズタブ、検索ボックスでValueTupleを検索して、System.ValueTupleパッケージ、以下のように表示されます。
ValueTupleの作成と初期化は簡単です。括弧()を使用して値を指定して作成および初期化できます。
var person = (1, "Bill", "Gates"); //等価なタプル //var person = Tuple.Create(1「 Bill」,「 Gates」);"Bill", "Gates");
各要素の型を指定してValueTupleを初期化することもできます。以下のように示されます。
ValueTuple<int, string, string> person = (1, "Bill", "Gates"); person.Item1; // 返します1 person.Item2; // 「Bill」を返します person.Item3; // 「Gates」を返します
各メンバーの型を宣言する簡略化方法があります。
(int, string, string) person = (1, "Bill", "Gates"); person.Item1; // 返します1 person.Item2; // 「Bill」を返します person.Item3; // 「Gates」を返します
上記のtuple初期化文ではvarを使用していないことに注意してください。代わりに、括弧の中で各メンバーの値の型を提供しています。
タプルは少なくとも2つの値が必要です。以下はタプルではありません:
var number = (1); // int型、タプルではありません var numbers = (1,2); // 有効なタプル
Tupleとは異なり、ValueTupleは8個以上の値を含むことができます。
var numbers = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);
ValueTupleの属性には、デフォルトの属性名(例えばItem)ではなく、名前を割り当てることができます。1,Item2などです。
(int Id, string FirstName, string LastName) person = (1, "Bill", "Gates"); person.Id; // 返します1 person.FirstName; // 「Bill」を返します person.LastName; // 「Gates」を返します
また、右側でメンバー名に値を割り当てることができます。以下のように示されます。
var person = (Id:1, FirstName:"Bill", LastName: "Gates");
左側または右側でメンバー名を提供できますが、両側で提供することはできません。左側が優先されます。以下の内容では右側の名前を無視します。
// PersonId、FName、LNameは無視されます。 (int Id, string FirstName, string LastName) person = (PersonId:1, FName:"Bill", LName: "Gates"); //PersonId、FirstName、LastNameは無視されます。デフォルトの名前はItemです:1,Item2,Item3。 (string, string, int) person = (PersonId:1, FName:"Bill", LName: "Gates");
変数をメンバー値として割り当てることもできます。
string firstName = "Bill", lastName = "Gates"; var per = (FirstName: firstName, LastName: lastName);
以下のメソッドはValueTupleを返します。
static void Main(string[] args) { DisplayTuple(1, "Bill", "Gates"); } static void DisplayTuple((int, string, string) person) { Console.WriteLine($"Id = { person.Item1}); Console.WriteLine($"First Name = { person.Item2}); Console.WriteLine($"Last Name = { person.Item3}); }
メソッドから返されるValueTupleに対して、異なるメンバー名を指定することもできます。
static void Main(string[] args) { var person = GetPerson(); } static (int, string, string) GetPerson()}} { return (Id:1, FirstName: "Bill", LastName: "Gates"); }
ValueTupleを解构することで、その各メンバーを検索できます。解构宣言文法は、ValueTupleを複数の部分に分割し、それぞれを新しい変数に割り当てます。
static void Main(string[] args) { // 属性名の変更 (int PersonId, string FName, string LName) = GetPerson(); } static (int, string, string) GetPerson()}} { return (Id:1, FirstName: "Bill", LastName: "Gates"); }
varを使って明示的なデータ型名を代わりに使用することもできます。
static void Main(string[] args) { // 使用var作データ型 (var PersonId, var FName, var LName) person = GetPerson(); } static (int, string, string) GetPerson()}} { return (Id:1, FirstName: "Bill", LastName: "Gates"); }
ValueTuple は、使用しないメンバーに対して「捨てる」構文を許可します。
// 未使用のメンバー LName には下線 _ を使用して捨てます。 (var id, var FName, _) = GetPerson();