У меня есть набор инструментов, который имеет множество методов, часто принимающих Expression<Func<T,TProperty>>
в качестве параметров. Некоторые могут быть только одноуровневыми (o=>o.Name
), а некоторые могут быть многоуровневыми (o=>o.EmployeeData.Address.Street
).
Я хочу что-то разработать (задача MSBuild - плагин Visual Studio, надеюсь, первый), который читает все пользовательские .cs файлы и дает ошибки сборки, если данный параметр не является выражением свойства (но что-то вроде o=>o.Contains("foo")
), или если задано многоуровневое выражение, где разрешен только один уровень.
Я попытался сначала скомпилировать IL-код, но поскольку деревья выражений являются "трюком" компилятора С#, в IL все, что я вижу, это создание экземпляров экземпляра и т.д., и хотя я мог проверять каждый, если только MemberExpressions (и правильный номер из них), это не так здорово.
Тогда Рослин пришла мне в голову. Можно ли написать что-то подобное с Roslyn?