Cây biểu thức có phải là một tính năng ngôn ngữ cốt lõi hoặc một tính năng của đối tượng/thư viện BCL không? Có điều gì đó mà bạn không thể xây dựng mà không có các tính năng ngôn ngữ cốt lõi của C#?Cây biểu thức có phải là tính năng ngôn ngữ cốt lõi của C# không?
Trả lời
Không, cây biểu thị không phải là tính năng ngôn ngữ. Chúng có thể sử dụng được từ bất kỳ ngôn ngữ .NET nào để chúng không thể được C# cụ thể. Chúng là các kiểu CLR bình thường được định nghĩa trong một assembly tích hợp.
Việc xây dựng thông qua biểu thức lambda (và LINQ) là C# cụ thể. Nhưng bạn luôn có thể xây dựng một cách thủ công tương đương Expression
. Trình biên dịch C# không làm gì hơn là phát ra các cuộc gọi đến các phương thức xây dựng tĩnh nổi tiếng Expression
. Bạn có thể kiểm tra những gì trình biên dịch phát ra bằng cách giải mã nhị phân với Reflector được cấu hình cho một phiên bản .NET cũ.
Cho dù cây biểu thức sử dụng API nội bộ .NET Framework là một câu hỏi không liên quan, nhưng tôi không thể nghĩ ra bất kỳ lý do nào khiến chúng cần.
"Không, chúng không phải là một tính năng ngôn ngữ. Chúng có thể sử dụng được từ bất kỳ ngôn ngữ .NET nào để chúng không thể là C# cụ thể". - Điều này không đúng. Họ * là * một tính năng ngôn ngữ của C# ... và F # ... và Visual Basic ... ---- Mỗi nhu cầu phải biết cú pháp ngôn ngữ và thực sự tạo ra một cây biểu thức từ văn bản trong tệp nguồn của bạn. –
@Timothy: Không, bạn đang tham chiếu đến _lambda expressions_. _Those_ là các tính năng ngôn ngữ. Các lớp 'Expression' chỉ là các lớp .NET thông thường. Bất cứ thứ gì có thể sử dụng các lớp .NET đều có thể sử dụng các lớp 'Expression'. –
@JeffMercado Oh ... đúng. Tôi đã nghĩ câu hỏi ban đầu là về tính năng lambda-expression-to-'Expression', không phải là các lớp 'Expression'. Có, đó không phải là tính năng ngôn ngữ. :) –
Như bạn có thể thấy từ định nghĩa lớp học Expression
, nó được xác định trong không gian tên System.Linq.Expressions
. Điều này, Biểu thức không phải là một tính năng ngôn ngữ C# - đó là một lớp có thể được tiêu thụ bởi tất cả các ngôn ngữ nhắm vào CLR.
Ở đây, ví dụ, là một bài viết trên MSDN có tiêu đề "Expression Trees (C# and Visual Basic)" minh họa cách tạo và sử dụng cây biểu thức bằng C# và VB.NET.
- 1. Ngôn ngữ PHP có phải là C?
- 2. Cây LINQ có phải là cây thích hợp không?
- 3. JavaScript có phải là ngôn ngữ ứng dụng không?
- 4. Python không phải là ngôn ngữ chuẩn?
- 5. XSLT có phải là ngôn ngữ lập trình chức năng không?
- 6. Phần nào của ngôn ngữ C# là .ForEach()?
- 7. Truyền bằng Ngôn ngữ Biểu thức
- 8. JavaScript thoát bằng ngôn ngữ biểu thức
- 9. ngôn ngữ nào có được IEEE 754 phải không?
- 10. Đọc thuộc tính của đối tượng với cây biểu thức
- 11. LL (2) ngôn ngữ không phải là LL (1)
- 12. Một ngôn ngữ truy vấn cây cho cây trong bộ nhớ của đối tượng?
- 13. Có phải các biểu thức lambda của C++ 0x không có loại có tên không?
- 14. Tìm xem cây có phải là cây con của
- 15. Ngữ pháp PEG không phải là đệ quy trái cho một "biểu thức"
- 16. Có biểu trưng chính thức của C# không?
- 17. Cây biểu thức Java
- 18. Các tính năng của ngôn ngữ thông dịch nào có thể được biên dịch?
- 19. Các tính năng ngôn ngữ nào của Ruby bạn sẽ làm nổi bật so với C#?
- 20. Có cần phải đọc Dữ liệu cốt lõi trong performBlock khi sử dụng NSMainQueueConcurrencyType không?
- 21. Cần có những tính năng ngôn ngữ nào trong ngôn ngữ lập trình để tạo trình biên dịch?
- 22. Ngôn ngữ: onConfigurationChanged không được gọi là
- 23. Làm thế nào để bạn cung cấp nhãn cho trục của biểu đồ Lõi cốt lõi?
- 24. mảng C++ - biểu thức phải có giá trị không đổi
- 25. Tính năng C# nào sẽ bị xóa nếu tính tương thích ngược không phải là vấn đề?
- 26. '+ entityForName: nil không phải là tham số NSManagedObjectContext hợp pháp - Dữ liệu cốt lõi
- 27. Tại sao ngôn ngữ Python không có phương thức writeln()?
- 28. Có ngôn ngữ nhanh hỗ trợ tính năng tiếp tục di động không?
- 29. C# là một ngôn ngữ cấp cao?
- 30. Tạo cây biểu thức trong R
Trong phạm vi có một diễn viên tiềm ẩn từ một lambda của biểu mẫu 'Func 'tới' Biểu thức > 'mà trình biên dịch phải làm lúc biên dịch, tôi nghĩ vậy. –
Bạn có thể sử dụng các phương thức trình xây dựng thay vì dịch biểu thức lambda thành cây biểu thức. Nhưng nó * rất nhiều * tiết hơn. – CodesInChaos
Bạn đang hỏi về phần nào của tính năng này? – SLaks