Подтвердить что ты не робот

Инициализация переменной лямбда С#

Сегодня впервые я увидел нечто похожее на это:

private string m => string.Empty;

используя lambda для инициализации переменной. Зачем делать это так и в чем преимущества?

4b9b3361

Ответ 1

Он называется Expression-Bodied Properties, и это просто ярлык для свойств только для getter:

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

Что касается преимуществ этого подхода, я думаю, вы можете рассматривать его как синтаксический сахар, который лишь сэкономит вам несколько нажатий клавиш.

Смотрите Roslyn Wiki

Ответ 2

Это не переменная, это свойство с выражением. Свойство только для чтения, в вашем случае возвращает string.Empty.

Это то же самое, что и

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

Это одна из новых функций, представленных в С# 6.0. Преимущество - более короткий, более сжатый код. Особенно, если у вас есть класс с множеством простых свойств для чтения.

Если вы хотите увидеть реальный пример этого синтаксиса, отметьте этот пост в блоге Эрика Липперта. Как вы можете видеть, там много однострочных методов и свойств. Без выразительных свойств и членов код будет намного длиннее. И значительная его часть - фигурные скобки.

Ответ 3

На самом деле это не инициализация переменных, это связывает выражение лямбда "string.Empty" с "m", поэтому всякий раз, когда вы разыскиваете "m", он будет фактически оценивать ваше лямбда-выражение.

Для дальнейшего чтения просмотрите эту страницу github (раздел "Элемент функции с выражением выражения" )