web-dev-qa-db-ja.com

C#ラムダ変数の初期化

今日、初めてこれに似たものを見ました。

private string m => string.Empty;

ラムダを使用して変数を初期化します。なぜこれをこのように行うのですか?利点は何ですか?

27
user2818430

これはExpression-Bodied Propertiesと呼ばれ、ゲッターのみのプロパティのショートカットにすぎません。

private string m
{
    get { return string.Empty; }
}

このアプローチの利点については、いくつかのキーストロークを節約するだけの構文糖として扱うことができると思います。

参照 Roslyn Wiki

25
haim770

これは変数ではなく、式のボディプロパティです。読み取り専用プロパティ。この場合はstring.Emptyを返します。

それは同じです

private string m { get { return string.Empty; } }

これは、C#6.0で導入された新機能の1つです。利点は、より短く、より簡潔なコードです。特に、単純な読み取り専用プロパティが多数あるクラスがある場合は、.

この構文の実際の例を見たい場合は、 Eric Lippertのブログのこの投稿 を確認してください。ご覧のとおり、1行のメソッドとプロパティが多数あります。式本体のプロパティとメンバーがなければ、コードははるかに長くなります。そして、そのかなりの部分は中括弧になります。

12
Jakub Lortz

これは実際には変数の初期化ではなく、ラムダ式「string.Empty」を「m」にバインドするため、「m」を逆参照すると必ずラムダ式が実際に評価されます。

詳細については、チェックアウト このgithubページ (「式本体関数メンバー」セクション)

5