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