Здравствуйте, AUDev, Вы писали:
AUD>но теоретически ведь можно в твоем случае без хардкода структуры обхода просто делать перебор свойств типа Expression (или типа коллекции/массива Expression) у переданного в Visit объекта, и вызывать Visit для значений этих свойств (или свойств элементов коллекции Expression), если порядок обхода свойств не важен?
Если бы и можно было, то я бы не стал этого делать из соображений производительности.
Но нельзя минимум по двум причинам.
Во-первых, эта структура не однородная. Т.е. в ней встречаются объекты как
здесь, которые имеют другой тип, но в них есть наш Expression. Т.е. происходит определённый разрыв.
Во-вторых, в члучае трансформаций для Expression вызывается метод Update специфичный для конкретного типа Expression.