Проблема со связью лямбда-выражений - PullRequest
0 голосов
/ 01 марта 2011

Кажется, у меня проблемы с передачей точного значения следующего лямбда-выражения разработчику, который плохо понимает такие выражения (где list - общий список .Net):

list.Sort((x, y) => x.Name.CompareTo(y.Name));

Как вы объяснитеэто заявление другому разработчику?Что бы вы ему сказали?

EDIT : С тех пор я заменил Linq для лямбда-выражения.

Ответы [ 3 ]

2 голосов
/ 01 марта 2011

Прочитайте утверждение следующим образом, и значение станет ясным -

Sort the list, such that for all x & y in the list, x.Name is compared to y.Name
2 голосов
/ 01 марта 2011

Я бы сказал следующее:

  • Это не LINQ. Sort - это метод, определенный в List<T> классе
  • (x, y) => x.Name.CompareTo(y.Name) - это лямбда-выражение , которое представляет собой сокращенный стиль объявления делегата анонимному методу. Представьте часть слева от => как сигнатуру метода, а часть справа - как тело метода. В сигнатуре метода нет необходимости явно указывать типы параметров; компилятор вычисляет это на основе типа List<T>.
  • Сортировка вызовет метод, к которому делегат обращается повторно для пар объектов в списке, чтобы определить порядок сортировки
  • В этом конкретном случае он будет сравнивать свойство Name объектов.
  • Код выдаст NullReferenceException, если в метод сортировки передано x, где Name равно null.
1 голос
/ 01 марта 2011

Метод Sort() принимает делегата (метод), который принимает два параметра и возвращает целое число, указывающее, как первый параметр сравнивается со вторым.Делегат создается из лямбда-выражения с оператором =>, у которого параметры (x,y) с одной стороны и выражение для возвращаемого значения с другой стороны.

...