66
58

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-11-13

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

66
58
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
66
58

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?