Деревья выражений предлагают способ проверки некоторого фрагмента кода перед его фактической компиляцией во время выполнения.
Вы можете сделать ровно две вещи с деревом выражений:
- Скомпилируйте его в делегат, используя Expression.Compile или
- Посетите узлы дерева и сгенерируйте что-нибудь еще из него (например, оператор SQL).
Деревья выражений - это круто, но шансы на то, что они имеют какую-либо прямую полезность для типичного веб-сайта или корпоративного приложения, являются удаленными. Вы можете использовать их только тогда, когда вы (а) хотите сгенерировать код другого типа из источника C # во время выполнения или (б) хотите использовать Reflection, но обеспечите некоторую степень безопасности во время компиляции.
Если вы работаете с библиотеками многократного использования - средами DI, средами AOP, средами MVC / MVP / MVVM, средами ORM и т. Д., Или пытаетесь расширить одну из этих сред (включая Linq-to-XYZ), то вы вероятно, найдут применение для деревьев выражений (таких как расширение Linq to SQL пакетное обновление ), хотя трудно обсудить конкретные примеры, потому что это будет полностью зависеть от конструкции такого основа.
Если вы не создаете такого рода инструменты, то деревья выражений - это не более чем любопытство. Конечно, приятно узнать об этом, но не разочаровывайтесь, если вы не найдете для них слишком много практического применения.
Несколько примеров библиотек, использующих деревья выражений:
... Это должно дать вам представление о том, какие проекты серьезно используют деревья выражений. Поэтому, если вы создаете свою собственную среду выполнения или MVC, вам определенно нужно изучить все, что вы можете. ;)