Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2015, 00:21   #1
kirkl
Новичок
Джуниор
 
Регистрация: 30.03.2013
Сообщений: 1
По умолчанию лямбда выражения(c#) помогите разобраться

вот кусочек кода, объясните пожалуйста подробно что именно там происходит. в особенности про лямбда выражение(x => x.Model)
Код:
        public IEnumerable<Vehicle> SortedByModel() 
        {
            return VehicleCollection().OrderBy(x => x.Model);
        }
kirkl вне форума Ответить с цитированием
Старый 21.02.2015, 10:29   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Получая x, анонимная функция возвращает x.Model
Подробнее не получится, так как нет исходного кода, необходимого для более подробного описания.
В крупном проекте нужно в отладчике смотреть порядок вызовов, так как может быть большой глубина наследования классов и множество виртуальных методов и абстрактных классов.

Пример в документации MSDN:
https://msdn.microsoft.com/ru-ru/library/bb397687.aspx

Простейший пример:
Код:
using System;
using System.Linq.Expressions;

class e 
{
delegate int del(int i);
static void Main()
{
del myDelegate = x => x * x; //возведение в квадрат
int j = myDelegate(5); //j = 25
Expression<del> myET = x => x * x;
}
}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 21.02.2015, 10:55   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
объясните пожалуйста подробно что именно там происходи
Все очень просто: Сам метод OrderBy может принимать некие параметры - имя переменной, которая будет известна только в рамках (...) этого метода.
Далее в эту переменную OrderBy будет помещать значение из VehicleCollection.
Если это просто массив, значит значение будет скалярным, а в данном случае коллекция содержит судя по всему некие объекты с полями. Одно из таких полей - Model. Поскольку OrderBy занимается сортировкой, то ему нужно указывать критерий сортировки, что и делает выражение => x.Model, которое можно перевести как использовать поле Model в качестве сортируемого элемента
Если я не ошибаюсь, чтоб к примеру отсортировать по двум полям нужно было бы писать x => x.Model, x.Другое поле. Это нужно уточнить в хелпе.
Если в кратце - это указание по какому полю сортировка.
В других методах такие лямбды будут означать другое, но смысл остается тем же.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
События и лямбда-выражения Devdev12 Общие вопросы .NET 2 11.09.2013 14:32
Калькулятор, лямбда-исчисление Granus Общие вопросы C/C++ 0 08.06.2011 23:34
g++ лямбда the_deer_one Общие вопросы C/C++ 3 22.08.2010 15:19
Лямбда в С++? Utkin Общие вопросы по программированию, компьютерный форум 8 04.06.2010 12:51