Подобная тема уже поднималась, но все же еще раз. Вот мое мнение.
Проект LINQ хорош во всём, что не касается Expression<T>. От Expression<T> хорошо себя показывает только property expression “x => x.SomeProperty”. Всё что “глубже” property expression при использовании Expression<T> можно считать не очень удачной частью проекта LINQ. Чужеродными телами являются эти Expression<T> в обычном C#-коде, причем они маскируются под обычный код.
А выражение для property expression через Expression<T> тоже не самое удобное, но гораздо лучше, чем вообще отсутствие такой возможности.
Здравствуйте, Alexander Polyakov, Вы писали:
AP>Подобная тема уже поднималась, но все же еще раз. Вот мое мнение.
AP>Проект LINQ хорош во всём, что не касается Expression<T>. От Expression<T> хорошо себя показывает только property expression “x => x.SomeProperty”. Всё что “глубже” property expression при использовании Expression<T> можно считать не очень удачной частью проекта LINQ. Чужеродными телами являются эти Expression<T> в обычном C#-коде, причем они маскируются под обычный код.
AP>А выражение для property expression через Expression<T> тоже не самое удобное, но гораздо лучше, чем вообще отсутствие такой возможности.
Здравствуйте, Alexander Polyakov, Вы писали:
AP>Проект LINQ хорош во всём, что не касается Expression<T>. От Expression<T> хорошо себя показывает только property expression “x => x.SomeProperty”. Всё что “глубже” property expression при использовании Expression<T> можно считать не очень удачной частью проекта LINQ. Чужеродными телами являются эти Expression<T> в обычном C#-коде, причем они маскируются под обычный код.
А собственно, косяк Expression<T> в том, что при их дизайне не учтен один из базовых принципов программирования -- декомпозиция. Одиночный Expression строит компилятор, а когда разбиваем Expression на два, их надо сращивать руками.
Здравствуйте, Alexander Polyakov, Вы писали:
AP>А собственно, косяк Expression<T> в том, что при их дизайне не учтен один из базовых принципов программирования -- декомпозиция. Одиночный Expression строит компилятор, а когда разбиваем Expression на два, их надо сращивать руками.
Переходи на немерле.
Он для своего AST умеет и композицию и декомпозицию.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Alexander Polyakov, Вы писали:
AP>А собственно, косяк Expression<T> в том, что при их дизайне не учтен один из базовых принципов программирования -- декомпозиция. Одиночный Expression строит компилятор, а когда разбиваем Expression на два, их надо сращивать руками.
Увы, но программировать приходится.
Здравствуйте, Alexander Polyakov, Вы писали:
AP>Проект LINQ хорош во всём, что не касается Expression<T>. От Expression<T> хорошо себя показывает только property expression “x => x.SomeProperty”. Всё что “глубже” property expression при использовании Expression<T> можно считать не очень удачной частью проекта LINQ. Чужеродными телами являются эти Expression<T> в обычном C#-коде, причем они маскируются под обычный код.
AP>А выражение для property expression через Expression<T> тоже не самое удобное, но гораздо лучше, чем вообще отсутствие такой возможности.
Какой-то жуткий сумбур, неопределенные понятия вроде "property expression" и вообще не пойми что. Ты что сказать то хотел?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Lloyd, Вы писали:
WH>>Переходи на немерле. WH>>Он для своего AST умеет и композицию и декомпозицию.
L>А для Expression-а?
Да по фигу для чего. Линковские System.Linq.Expressions.Expression делаются теми же макросами. Вот только если ты перейдешь на немерл, то System.Linq.Expressions.Expression тебе особо нужен не будет, так как есть более удобные средства — макросы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Какой-то жуткий сумбур, неопределенные понятия вроде "property expression" и вообще не пойми что. Ты что сказать то хотел?
Товарищ нашел в LINQ фатальный недостаток и изобрел собственную серебрянную пулю. Только почему то эта пуля никого не заинтересовала.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Товарищ нашел в LINQ фатальный недостаток и изобрел собственную серебрянную пулю. Только почему то эта пуля никого не заинтересовала.
Ну, хоть описал бы что изобрел, что ли...
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.