.NET C# 3.5: Для чего Выражение <> используется?

Используйте программу мишени и копируйте stderr к stdout.

 program 2>&1 | tee > logfile
9
задан Alex 15 September 2009 в 05:27
поделиться

3 ответа

Выражение почти полностью используется для LINQ, но не , чтобы быть . В LINQ он обычно используется для «захвата» логики, выраженной в коде, но сохранения ее в данных. Затем эти данные могут быть изучены поставщиком LINQ и обработаны соответствующим образом - например, путем преобразования их в SQL. Обычно деревья выражений в LINQ создаются компилятором из лямбда-выражений или выражений запросов, но в других случаях может быть удобно использовать API непосредственно самостоятельно.

Несколько примеров других мест, где я его использовал и видел использовано:

  • В MiscUtil Марк Гравелл использовал его для реализации «общей арифметики» - если тип имеет соответствующий оператор, его можно использовать универсально.
  • В UnconstrainedMelody я использовал его аналогичным образом для выполнения операций с перечислениями флагов, независимо от их базового типа (что сложнее, чем вы могли ожидать, из-за long и ulong с разными диапазонами)
  • В Visual LINQ я использовал выражения запроса для «оживления» LINQ, чтобы вы могли видеть, что происходит. Хотя очевидно, что это использование LINQ, это не традиционная форма перевода логики в другую форму.
8
ответ дан 4 December 2019 в 19:35
поделиться

С точки зрения LINQ, есть вещи, которые вы можете сделать для создания более универсальных запросов LINQ во время выполнения, чем вы можете использовать только лямбда-выражения.

Я использовал Выражение много раз как микрокомпилятор, как альтернатива DynamicMethod и IL. Этот подход усиливается в .NET 4.0 (, как обсуждалось в InfoQ ), но даже в 3.5 есть множество вещей, которые вы можете делать (обычно на основе данных времени выполнения; конфигурации и т. Д.):

Я также использовал их как часть математического механизма для некоторой работы, которую я проделал с Microsoft, например, для анализа математического выражения ("(x + 12) * y = z "и т.д.) в дерево Expression , скомпилируйте его и запустите.

Еще одно интересное использование (проиллюстрированное Джейсоном Боком здесь ) - генетическое программирование; Постройте своих кандидатов в виде деревьев Expression , и у вас есть необходимый код для их быстрого выполнения (после Compile () ), но, что важно (для генетического программирования), также для обмена фрагментами.

4
ответ дан 4 December 2019 в 19:35
поделиться

Take a look at my before & after code in my answer to another SO question.

Summary: Expression<> greatly simplified the code, made it easier to understand, and even fixed a phantom bug.

0
ответ дан 4 December 2019 в 19:35
поделиться
Другие вопросы по тегам:

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