競技プログラミングで忘れがちなので個人用に。
VisualStudioに「こっちの書き方でいんじゃね?」と教えられることが多いものを特に重点的に置いておく。
競プロ用のため、記事内のC#コードのバージョンは13.0が前提です。一部は13.0でなくても動きます。
筆者がコーディングに躓くほど記事内容が充実していきます。
リストのコピーと要素の追加
List<int> piyoList = new List<int>(hogeList) { fugaItem1, fugaItem2 }; // 基本1行で行いたいとき、特にリストを使ったBFSやDFSで要素を段階的に少しずつ追加していく時に使います。
型が自明な時
メソッドの引数など型推論が効くのであれば色々省略できる。
var fuga = new List<int>(hogeList) { hoge }; // 最初にvarを置くとこれが限度
List<int> piyo = [.. hogeList, hoge]; // 最初に型を明示するほうがむしろ短く書ける。
// hogeMethod(List<int> ary)というメソッドがあったとして
hogeMethod([.. hogeList, fugaItem1]); // スプレッド演算子はC#12.0から
hogeMethod([i]); // [i] は new List<int>(){i} と同義、変数iを格納したコレクション。
hogeMethod([]); // 空配列、空リスト。C#12.0からのはず
hogeMethod(new ()); // ターゲット型指定newはC#9.0から
hogeMethod(new List<int>()); // 原形、空リスト一時変数を使わずに値のスワップ
二分ヒープの実装でbubble-upをする時などに便利です。
var hoge = 10;
var fuga = 20;
(fuga, hoge) = (hoge, fuga); // タプル型はC# 7.0から、Unityでも使える!多分!
Console.WriteLine($"hoge={hoge}, fuga={fuga}"); // hoge=20, fuga=10

コメント