когда я должен использовать лямбда-выражения, который идет с C# 3.0?

Парни Hai,

Мои поддерживающие разработчики говорили о лямбда-выражениях этим утром. Таким образом, я решил спросить это здесь в ТАК

  • когда я должен использовать лямбда-выражение, которое идет с C# 3.0?
7
задан ACP 12 January 2010 в 10:00
поделиться

4 ответа

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

Пример Threadpool:

ThreadPool.QueueUserWorkItem(state => {
    // the code to run on separate thread goes here
});

LINQ:

var myItems = GetSomeIEnumerable()
                  .Where(o => o.SomeProperty.Equals("some value"));
                  .OrderBy(o => o.SomeOtherProperty);
2
ответ дан 7 December 2019 в 05:23
поделиться

Экспрессия лямбда - это анонимная функция, которая может содержать выражения и высказывания и может использоваться для создания делегатов или типов деревьев выражения.

Ожидание использования

del myDelegate = delegate(int x){return x*x; };
int j = myDelegate(5); //j = 25

Вы можете написать

del myDelegate = x => x * x;
int j = myDelegate(5); //j = 25
5
ответ дан 7 December 2019 в 05:23
поделиться

Лично мне нужно будет в любое время отказаться от использования std::for_each (написать специальные функторы/сложные boost:: лямбда s), я нахожу BOOST _ FOREACH и C++ 0x на основе диапазона для более четкого:

BOOST_FOREACH(Monster* m, monsters) {
     if (m->has_plan()) 
         m->act();
}

против

std::for_each(monsters.begin(), monsters.end(), 
  if_then(bind(&Monster::has_plan, _1), 
    bind(&Monster::act, _1)));
-121--670208-

В более общем смысле, git help поможет по крайней мере с такими простыми вопросами, как:

zhasper@berens:/media/Kindle/documents$ git help
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path] [-p|--paginate|--no-pager] [--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE] [--help] COMMAND [ARGS]

The most commonly used git commands are:
   add        Add file contents to the index
   :
   rm         Remove files from the working tree and from the index
-121--1746888-

По крайней мере, не используйте для событий a la

myUserControl.Loaded += (sender, e) => DoSomething(); // coding horror!!!1 :-P

, потому что на данный момент вы все еще не можете отписаться и очистить вещи больше так легко. Конечно, есть фабрики WeakEventHandler и другие элементы, но все равно лучше удалить все обработчики событий вручную, как только UserControl будет удален из родительского объекта.

Для всего остального, я думаю, они значительно улучшают читаемость, поэтому используйте по собственному усмотрению.

0
ответ дан 7 December 2019 в 05:23
поделиться

Да, вы можете сделать это так:

for (char alphabet = 'A'; alphabet <= 'Z'; alphabet++) {
    System.out.println(alphabet);
}

Это также возможно с помощью набора:

for (int i = 65; i <= 90; i++) {
    System.out.println((char)i);
}
-121--1166779-

В настоящее время это невозможно из-за синтаксического анализатора yacc . Этот поток на Ruby-forum предлагает несколько решений.

class A
     define_method(:hello) do | name, *opt_greeting|
        option = opt_greeting.first || Hash.new
        greeting = option[:greeting] || "hello"
        puts greeting+" "+name
     end
end


a = A.new
a.hello "barbara"
a.hello "Mrs Jones", :greeting => "Good Morning"
-121--2521471-

Краткий ответ: прочитайте « C # в глубину » от самого популярного коллеги SO Джона Скита . Его отличная книга, и вы узнаете все о новых функциях C # 3, особенно когда их использовать, включая лямбда выражения.

1
ответ дан 7 December 2019 в 05:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: