Является ли ключевое слово from предпочтительным для прямых вызовов методов в C #?

2

Из этих двух вариантов:

var result = from c in coll where c % 2 == 0 select c;

var result = coll.Where ( c => c % 2 == 0 );

Что предпочтительнее?

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

Теги:
linq

2 ответа

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

Если у вас есть только одно или два предложения, я бы пошел на "точечную нотацию". Когда вы начинаете делать объединения, группировки или что-либо еще, что вводит прозрачные идентификаторы, синтаксис запросов начинает привлекать гораздо больше.

Часто стоит попробовать в обоих направлениях и посмотреть, что наиболее читаемо для этой конкретной ситуации.

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

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

  • 0
    Спасибо Джон. Исправил это сейчас. Кстати, что вы подразумеваете под "прозрачными идентификаторами"?
  • 1
    (Я отредактирую ответ, чтобы удалить этот бит.) Прозрачные идентификаторы введены так, что если у вас есть несколько переменных диапазона (например, от x в Foo от y в x.Something - x и y - переменные диапазона), то все это все еще работает, хотя позже у вас есть только одна последовательность - в основном, компилятор создает больше анонимных типов для вас. Выполнение этого вручную может сделать код менее понятным.
Показать ещё 4 комментария
2

Я всегда использую синтаксис лямбда, потому что для меня это яснее, что на самом деле происходит, и это выглядит здорово для загрузки. Но у нас есть несколько разработчиков, которые всегда делают обратное (sql nerds я думаю:) К счастью, такие инструменты, как ReSharper, могут просто преобразовываться между ними с помощью щелчка.

Ещё вопросы

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