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さん 編集リクエストありがとうございます。コードを修正致しました。