C#のタプル型について学んだことをアウトプットしていきます。
動作の確認は.NET9で行っています。
タプル型とは
タプル型は複数のデータをグループ化できます。
グループ化という意味では配列も同様ですが、タプル型は異なる型を混在させることが可能です。
また、タプル型はデータ構造的に参照型に見えなくもないですが、値型です。
宣言方法
タプル型は()を使用して宣言します。
以下のコードが基本的な宣言方法です。
(string, int) name = ("紫咲シオン", 1208);
Console.WriteLine(name);
// (紫咲シオン, 1208)
タプル型もvarを使用して型を省略できます。
var name2 = ("紫咲シオン", 1208);
Console.WriteLine(name2);
// (紫咲シオン, 1208)
データへのアクセス方法
個々のデータには変数名.Item位置でアクセスします。
この際、位置は配列とは違い、1から始まります。
var name3 = ("紫咲シオン", 1208, 'S');
Console.WriteLine($"名前:{name3.Item1} 誕生日:{name3.Item2} イニシャル:{name3.Item3}");
// 名前:紫咲シオン 誕生日:1208 イニシャル:S
C#のタプルはフィールド名を付けることができます。
各データの前にフィールド名: を付与します。
フィールド名を付けることで、変数名.Item位置の他に変数名.フィールド名でもアクセスできるようになります。
var name4 = (Name: "紫咲シオン", Birth: 1208);
Console.WriteLine($"名前:{name4.Name} 誕生日:{name4.Birth}");
// 名前:紫咲シオン 誕生日:1208
また、事前に宣言した変数を設定することで、その変数名がフィールドとなりアクセスすることも可能になります。
var name = "紫咲シオン";
var birth = 1208;
var name5 = (name, birth);
Console.WriteLine($"名前:{name5.name} 誕生日:{name5.birth}");
// 名前:紫咲シオン 誕生日:1208
分割代入
タプル型はフィールド毎にデータを分けて代入することが可能です。
(型 変数名, ...) = タプル型の変数でそれぞれのデータが分割されて代入されます。
var data = ("紫咲シオン", 1208);
(string name6, int birth2) = data;
Console.WriteLine($"名前:{name6} 誕生日:{birth2}");
// 名前:紫咲シオン 誕生日:1208
varを付けることで型を省略することも可能です。
var data2 = ("紫咲シオン", 1208);
var (name7, birth3) = data2;
Console.WriteLine($"名前:{name7} 誕生日:{birth3}");
// 名前:紫咲シオン 誕生日:1208