C#
tips
C#小品集シリース
C#6.0
C#7.0

C#のあまり見かけない便利な5つの記法

More than 1 year has passed since last update.

C#のあまり見かけない便利な5つの記法
あくまで主観ですが、調べ物をしていたりサンプルコードを見ていても、あまり見かけないけど便利な記法をメモとして纏めました。
誤りや補足などがあれば教えて頂けると幸いです。

1.文字列挿入

ログ出力などでstring.Formatを多用していましたが、C#6.0からは専用構文が使えるようになりました。
引数の数を間違えたり、コードが長くなったりするのを回避できます。式もかけたりします。

C#6.0から(文字列挿入)

var str1 = "あい";
var str2 = "えお";
Console.WriteLine($"{str1}{str2}");

C#5.0まで(string.Format)

var str1 = "あい";
var str2 = "えお";
Console.WriteLine(string.Format("{0}う{1}", str1, str2));

【補足】 C#6.0の文字列挿入では式も使える。

var A = 4;
var format = $"Is A an even number? {(A % 2 == 0 ? "yes" : "no")} finish.";
Console.WriteLine(format);


2.プロパティ初期化子

こちらもC#6.0から使えるプロパティの初期化の構文です。

C#6.0から

//getのみも可能
public int ID { get; } = 1;
public string Name { get; private set; } = "あいうえお";

C#5.0まで

private string _Name = "あいうえお";
public string Name{
    get { return _Name; }
    set { _Name = value; }
}


3.オプション引数

メソッドの引数にデフォルト値や、特定の引数のみを指定できる機能です。

static void Main(string[] args) {
    // 0 + 0 + 0
    var result = sum();
    // 3 + 0 + 0
    result = sum(3);
    // 1 + 3 + 0
    result = sum(1, 3);
    // 1 + 3 + 2
    result = sum(1, 3, 2);
    // 0 + 3 + 0
    result = sum(y: 3);
}

static int sum(int x = 0, int y = 0, int z = 0) {
    return x + y + z;
}


4.outパラメータの変数宣言

outパラメータを使う場合、C#7.0以前では変数を宣言しなければいけませんでしたが、メソッド内で変数の宣言ができるようになっています。

C#7.0から

var str = "10";
bool success = int.TryParse(str, out int result);

C#6.0まで

var str = "10";
int result = 0;
bool success = int.TryParse(str, out result);


5.例外フィルター

一番使う頻度は低いですがキャッチした例外のInnerExceptionで処理を切り分けるのに使っています。

try {
        throw new ArgumentException("unknown");
    } catch (ArgumentException e) when (e.Message == "test") {
        // Messageがtestの時はエラー無視
    } catch (ArgumentException e) when (e.Message == "unknown") {
        // Messageがunknownの時はメッセージを出力
        Console.WriteLine(e.Message);
    } catch (ArgumentException e) {
        // その他
        throw;
    }


ローカル関数やタプルなどもよく使いますが、とりあえず纏めてみました。

C#は新しい機能がどんどん追加されていくので楽しいです。
サンプルコードでは古い記法や構文で紹介されていることも多いですが、
C#の良い所は可読性と生産性だと思っているので、簡潔に書けるなら新しい構文を覚えて損はないと思います。


追記
@midori44さん 編集リクエストありがとうございます。コードを修正致しました。