Tôi có một bộ công cụ có nhiều phương pháp thường lấy Expression<Func<T,TProperty>>
làm tham số. Một số có thể là một cấp duy nhất (o=>o.Name
), trong khi một số có thể là đa cấp (o=>o.EmployeeData.Address.Street
).Roslyn có phải là công cụ thích hợp để kiểm tra biểu thức thời gian biên dịch không?
Tôi muốn phát triển thứ gì đó (MSBuild Task? Visual Studio Plugin? Hy vọng đầu tiên) đọc tất cả tệp .cs của người dùng và cung cấp lỗi xây dựng nếu tham số đã cho không phải là biểu thức thuộc tính (nhưng giống như o=>o.Contains("foo")
) , hoặc nếu một biểu thức đa cấp được đưa ra, nơi chỉ cho phép một cấp đơn.
Tôi đã thử xem mã IL đã biên dịch trước nhưng vì biểu thức cây là thủ thuật "#", trong IL tất cả những gì tôi thấy là tạo các thể hiện biểu thức và như vậy, và trong khi tôi có thể kiểm tra mỗi chỉ MemberExpressions (và số lượng chính xác của chúng) được tạo ra, nó không phải là tuyệt vời như vậy.
Sau đó, Roslyn đến với tôi. Có thể viết một cái gì đó như thế này với Roslyn?
Tại sao bạn cần thực thi những ràng buộc này? –
vì những thứ tôi làm trong các phương pháp này (xử lý thay đổi thuộc tính, kiểm tra lỗi, vv) chỉ có ý nghĩa đối với biểu thức đặc tính – TDaver
và bởi vì điều này giống như một điều thú vị để làm :) – TDaver