Выражение Linq в C # без аргументов

1

Как работает следующая строка кода, которая использует выражение Linq без аргумента? (это() =>)

RaisePropertyChanged(() => FullName);

Подпись RasiePropertyChanged:

protected virtual void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpression);

Спасибо.

Теги:

3 ответа

1
Лучший ответ

Это просто выражение, которое возвращает строку FullName.

На основе подписи вы можете увидеть, что она возвращает Func<string> которая совпадает с

private string SomeStringMethod()//string comes from the <T> being string
{
   return FullName;
}
1

Эта лямбда:

() => FullName

эквивалентен этому именованному методу:

private string SomeMethod()
{
    return FullName;
}

Пустые круглые скобки просто не означают никаких параметров.

0

Lambda () => FullName фактически преобразуется в частный статический метод, как упоминалось выше.

Когда код С# компилируется на промежуточном языке, все делегаты (Func - это не что иное, как делегат, инкапсулирующий метод, который возвращает некоторый тип T (в вашем случае, строку) и не принимает входных параметров).

Итак, в основном, лямбда эквивалентна:

private static string AMethod()
{ 
   return FullName;
}

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню