2009-03-25 40 views
51

Khi tôi lần đầu tiên gõ câu hỏi này, tôi đã làm như vậy để tìm các câu hỏi trùng lặp, hãy chắc chắn rằng ai đó chắc hẳn đã hỏi câu hỏi này. Kế hoạch của tôi là theo những liên kết song song đó thay vì đăng câu hỏi này. Nhưng câu hỏi này chưa được hỏi trước khi tôi có thể thấy ... nó không xuất hiện trong danh sách "Câu hỏi liên quan".Tài nguyên tốt nhất cho việc học C# thể hiện chiều sâu cây là gì?

Một số tài nguyên tốt nhất bạn đã tìm thấy (bài viết, sách, bài đăng trên blog, v.v.) để đạt được sự hiểu biết sâu sắc về cây biểu thị trong C#? Tôi tiếp tục bị bất ngờ bởi khả năng của họ, và bây giờ tôi đang ở điểm mà tôi nói, "OK, đủ ngạc nhiên. Tôi muốn dừng lại ngay bây giờ và lấy bằng tiến sĩ về những điều này." Tôi đang tìm kiếm tài liệu có hệ thống, có phương pháp bao gồm các khả năng và sau đó đi qua các ví dụ chi tiết về những gì bạn có thể làm với chúng.

Lưu ý: Tôi không nói về các biểu thức lambda. Tôi đang nói về Expression < T> và tất cả những thứ đi kèm với nó và phát sinh từ nó.

Cảm ơn.

Trả lời

34

Chương 11 (Cây biểu thức bên trong) và chương 12 (Mở rộng LINQ) Lập trình Microsoft Linq (ISBN 13: 978-0-7356-2400-9 hoặc ISBN 10: 0-7356-2400-3) là vô giá cho tôi. Tôi đã không đọc cuốn sách của Jons, nhưng anh ấy là một chàng trai chất lượng và giải thích mọi thứ tốt, vì vậy tôi cho rằng bảo hiểm của anh ấy cũng sẽ tốt.

Một nguồn lực lớn là Bart De Smet's blog

Ngoài ra, giữ cho mắt của bạn trên MSDN, mẫu mã để xây dựng một Simple Linq to Database (bởi Pedram Rezaei) sắp nhận được khoảng 40 trang của DOCO giải thích nó.

Tài nguyên thực sự hữu ích cho cây biểu thức trên thực tế tôi coi nó là phải có là công cụ gỡ lỗi Expression Tree Visualiser.

Bạn cũng nên tìm hiểu càng nhiều càng tốt về khách truy cập cây biểu thức, có một lớp cơ sở khá tốt trong thực hiện here. Dưới đây là một số mã mẫu có nguồn gốc từ lớp khách truy cập để làm một số gỡ lỗi (tôi dựa trên một số mã mẫu trong cuốn sách tôi đã đề cập) cuộc gọi phương thức prependIndent chỉ là một phương pháp mở rộng trên một chuỗi để đặt một "#:. "ở mỗi mức thụt lề.

internal class DebugDisplayTree : ExpressionVisitor 
    { 
    private int indentLevel = 0; 

    protected override System.Linq.Expressions.Expression Visit(Expression exp) 
    { 
     if (exp != null) 
     { 
     Trace.WriteLine(string.Format("{0} : {1} ", exp.NodeType, exp.GetType().ToString()).PrependIndent(indentLevel)); 
     } 
     indentLevel++; 
     Expression result = base.Visit(exp); 
     indentLevel--; 
     return result; 
    } 
    ... 
+0

Từ những gì tôi có thể thấy trên Amazon, cuốn sách này rất đẹp. Cám ơn vì đã chia sẻ. –

+4

Xem lại trình hiển thị - bạn cũng có thể thực hiện nó trong một dòng: http://marcgravell.blogspot.com/2009/03/visualizing-expressions-in-propertygrid.html –

17

Tôi không khẳng định họ đầy đủ, nhưng tôi có một số bài viết Expressionon my blog. Nếu bạn ở Vương quốc Anh, tôi cũng sẽ trình bày một phiên trên Expression tại DDD South West vào tháng 5 (và last night, nhưng quá muộn ;-p). Tôi có thể đăng các slide deck và một số các liên kết từ các bài báo liên quan, nếu bạn muốn ... thật không may, một pptx dự định được nói hiếm khi làm cho đọc độc lập hợp lý.

Một số khác đọc (không phải từ blog):

(và toàn bộ tải bài đăng ở đây và trên microsoft.public.dotnet.languages.csharp - thử tìm kiếm: + expression -regex - "cụm từ thông dụng"

+1

+1 - Marc có nhiều hơn "lên" với biểu thức cây hơn bất cứ ai khác mà tôi biết. –

+0

Tuyệt vời. Tôi sẽ kiểm tra những thứ này. Cảm ơn bạn. –

+0

Để biết thông tin, tôi cũng đã đăng một số suy nghĩ cho InfoQ: http://www.infoq.com/articles/expression-compiler –

5

Tìm hiểu sơ đồ. Biểu thức sử dụng các nguyên tắc tương tự như phép tính lambda, và do đó sẽ cung cấp cho bạn một số thông tin chi tiết hơn.

Ngoài ra, bạn có thể xem DLR, tương tự nhưng ít thanh lịch hơn.

Các vấn đề liên quan