Intereting Posts
Карта словаря в сущности Framework Code First Approach Свободная проблема Nhibernate (ClassMap) Прочитайте строку, сохраненную в файле ресурсов (resx) с динамическим именем файла EF Core 2.0 Identity – добавление свойств навигации Невозможно привязать данные к элементу управления, когда Control.Visible == false Невозможно расшифровать шифрованный ключ RSA Как округлить DateTime в MySQL? Хранить сложный объект в TempData Unity – как использовать несколько сопоставлений для одного и того же типа и вводить в объект Как получить конструктор как MethodInfo с помощью Reflection Что такое «string args» для основного classа? Более быстрый алгоритм изменения оттенка / насыщенности / яркости в растровом изображении Использование отражения для получения значений из свойств из списка classа Замена процесса. Начало с AppDomains C # SMTP-код отправки электронной почты не работает для Yahoo Mail, но отлично работает для других серверов, может ли кто-нибудь помочь?

Делегаты и Лямбдас и LINQ, Oh My!

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

Я нахожусь в проекте, который включает в себя мою потребность изучить ряд новых (для меня) технологий, включая LINQ (для OBJECTS и XML для целей этого проекта) и другие. Все, что я прочитал до сих пор, говорит о том, что для использования LINQ мне нужно будет полностью понять следующие (delegates, анонимные методы и выражения lambda).

Хорошо, так что теперь самое интересное. В прошлом у меня были delegates CONSUMED, поскольку я работал с моделью событий .NET, но большинство деталей были скрыты от меня (спасибо Microsoft!). Я понимаю, что на базовом уровне экземпляры делегата являются указателями на методы (я знаю, грубое чрезмерное упрощение).

Я понимаю, что анонимный метод – это, по сути, встроенный неназванный метод, обычно (если не исключительно), созданный как цель для делегата.

Я также понимаю, что lambdas используются различными способами для упрощенного синтаксиса и могут использоваться для указания простого анонимного метода для делегата.

Простите меня, если мое из моих описаний здесь ПУТЬ, это основной уровень, на который я понимаю эти темы.

Итак, задача:

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

  2. В какой степени мне нужно по-настоящему понять эти концепции, прежде чем применять LINQ в проекте к разумному эффекту? Я хочу полностью понять это и желаю потратить время. Я просто не могу ПОЛУЧИТЬ время, чтобы полностью изучить все эти вещи, прежде чем мне нужно будет произвести какую-то работу.

  3. Может ли кто-нибудь указать мне на некоторые хорошие статьи, которые объясняют эти темы и применяют их к примерам «реального мира», чтобы я мог разобраться с основами тем и их применением? То, что я имею в виду под реальным миром, это то, как я могу использовать это в контексте «Клиенты и счета-фактуры», а не абстрактные «Векторы и фигуры» или «Животные и коровы». Сценарий может быть несколько надуман для демонстрационных целей, но, надеюсь, не строго академический. Я нашел несколько примеров в режиме онлайн и в книгах, но мало кто из них объясняет «простой английский».

Заранее благодарю вас за ваше терпение, время и знания.

1) Эти описания звучат довольно точно для меня. Иногда анонимным методам и lambda-выражениям необходимо создать новый тип для размещения цели делегата, чтобы они могли действовать как замыкания .

2/3) Я бы немного почитал, пока вы не доволен делегатами, анонимными методами и lambda-выражениями. Я посвящаю главу связанным с делегатом изменениям в каждом из C # 2.0 и C # 3.0 в C # в глубине, хотя, конечно, другие книги также входят в детали. У меня также есть статья , если это поможет.

Что касается примеров – delegates используются для разных целей. Они все разные способы взглянуть на одну и ту же функциональность, но они могут чувствовать себя совсем по-другому:

  • Предоставление кода для вызова при запуске нового streamа
  • Реагирование на события пользовательского интерфейса
  • Предоставление фильтра, выбора, заказа и т. Д. Для запроса LINQ
  • Предоставление обратного вызова для завершения асинхронной операции

Если у вас есть какие-то конкретные ситуации, на которые вы хотели бы получить пример, на которые было бы легче ответить.

EDIT: Я должен отметить, что это хорошая новость, что вы работаете с LINQ для объектов и LINQ to XML на данный момент, так как это означает, что вам пока не нужно понимать деревья выражений. (Они classные, но один шаг за раз …) LINQ to XML – это всего лишь XML API, который отлично работает с LINQ – из того, что я помню, единственные времена, когда вы будете использовать делегатов с LINQ to XML, – это когда вы на самом деле вызываете LINQ to Objects. (Это очень приятно делать, правда, но это означает, что вы можете повторно использовать то, что уже узнали).

Поскольку у вас уже есть C # в Depth, главы 10 и 11 содержат довольно много примеров использования lambda-выражений (и выражений запроса, которые переводятся в lambda-выражения) в LINQ. В главе 5 есть несколько различных примеров использования делегатов.

Где я могу найти хорошее руководство по C # 3?

1) Ваши знания пока все в порядке. Лямбда-выражения превращаются в анонимные методы или System.Linq.Expressions.Expression, в зависимости от контекста. Поскольку вы не используете технологию баз данных, вам не нужно понимать выражения (все lambdas будут анонимными методами). Вы не указали методы расширения, но это очень важно (и легко) понять. Убедитесь, что вы видите, как применить метод расширения к интерфейсу, поскольку все функциональные возможности linq поступают из System.Linq.Enumerable – набор методов расширения для IEnumerable (Of T).

2) Вам не нужно глубокое понимание lambda.

Синтаксис стрелок (=>) был для меня самым большим препятствием. Стрелка разделяет подпись и тело lambda-выражения.

Всегда помните: методы Linq не выполняются до тех пор, пока не будут перечислены.

Следите за использованием переменных цикла в lambda . Это побочный эффект от отложенного исполнения, что особенно сложно отслеживать.

3) Конечно, вот некоторые из моих ответов, которые показывают вызовы метода linq – некоторые с xml.

  • Расщепление списков
  • Простой поиск существа Xml
  • Xml проекция – изменение формы

Прочитай это…

http://linqinaction.net/

.. и на все, на что вы отвечаете, будет дан ответ!