Используйте программу мишени и копируйте stderr к stdout.
program 2>&1 | tee > logfile
Выражение
почти полностью используется для LINQ, но не , чтобы быть . В LINQ он обычно используется для «захвата» логики, выраженной в коде, но сохранения ее в данных. Затем эти данные могут быть изучены поставщиком LINQ и обработаны соответствующим образом - например, путем преобразования их в SQL. Обычно деревья выражений в LINQ создаются компилятором из лямбда-выражений или выражений запросов, но в других случаях может быть удобно использовать API непосредственно самостоятельно.
Несколько примеров других мест, где я его использовал и видел использовано:
long
и ulong
с разными диапазонами) С точки зрения LINQ, есть вещи, которые вы можете сделать для создания более универсальных запросов LINQ во время выполнения, чем вы можете использовать только лямбда-выражения.
Я использовал Выражение
много раз как микрокомпилятор, как альтернатива DynamicMethod
и IL. Этот подход усиливается в .NET 4.0 (, как обсуждалось в InfoQ ), но даже в 3.5 есть множество вещей, которые вы можете делать (обычно на основе данных времени выполнения; конфигурации и т. Д.):
Я также использовал их как часть математического механизма для некоторой работы, которую я проделал с Microsoft, например, для анализа математического выражения ("(x + 12) * y = z "и т.д.) в дерево Expression
, скомпилируйте его и запустите.
Еще одно интересное использование (проиллюстрированное Джейсоном Боком здесь ) - генетическое программирование; Постройте своих кандидатов в виде деревьев Expression
, и у вас есть необходимый код для их быстрого выполнения (после Compile ()
), но, что важно (для генетического программирования), также для обмена фрагментами.
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.