【C#】よく使うのに忘れがちな書き方備忘録

記事内に広告が含まれています。

競技プログラミングで忘れがちなので個人用に。
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

コメント

タイトルとURLをコピーしました