2015-10-26 25 views
6

Tại sao không đóng #region gây ra lỗi trình biên dịch? Xét cho cùng, bản thân khu vực này hoàn toàn không ảnh hưởng đến mã được biên dịch, đúng không?Tại sao #region tạo lỗi biên dịch?

Tôi tin rằng đó là vì nó là một chỉ thị tiền xử lý, nhưng tại sao lại như vậy? Nó không được sử dụng như các chỉ thị khác sau khi tất cả.

class Application 
{ 
    #region Whatever <- Causes an error. 
    static void Main(string[] c) 
    { 

    } 

} 

Tại sao nó không thể bỏ qua? Hoặc là có một tính năng tôi không biết về #region giải thích tại sao nó được biên dịch?

Chỉnh sửa: Tôi nhận được ví dụ này không biên dịch vì không có #endregion tương ứng. Nhưng nó không nên được coi là một thẻ đóng bị thiếu trong một bình luận xml? Ý tôi là, nó có cùng tầm quan trọng phải không?

Chỉnh sửa lần thứ hai: Tôi đang tìm hiểu quyết định thiết kế sau khi thực hiện #region chỉ thị tiền xử lý. Tại sao không chỉ là một loại bình luận mà IDE sẽ nhận ra là một vùng mã có thể bị sụp đổ?

+3

Nó không biên dịch vì bộ tiền xử lý mong đợi một cái gì đó ở đó, và nó không thể tìm thấy nó, do đó, nó lỗi. Bạn nói đúng là nó không sửa đổi mã, tuy nhiên bộ tiền xử lý cần xem thẻ kết thúc phù hợp. –

+0

Không, tầm quan trọng của chỉ thị tiền xử lý rất khác với thẻ nhận xét xml không khớp. – jrummell

+0

@ jrummell thực sự, theo ý kiến ​​của tôi, đó là ngược lại. – AgentFire

Trả lời

14

Tại sao #region không đóng lại gây ra lỗi trình biên dịch?

Vì số specs nói như vậy.

Khối #region phải được chấm dứt bằng chỉ thị #endregion.

Vâng, họ sẽ không thể là một phần của chương trình biên soạn, nhưng chỉ những người khác trước khi xử lý có thể xác định, những gì đã trở thành một phần của chương trình, ví dụ #if DEBUG(bao gồm một cái gì đó).

2.5 Pre-processing directives

chỉ thị Pre-chế biến không phải là thẻ và không phải là một phần của cú pháp ngữ pháp của C#. Tuy nhiên, chỉ thị tiền xử lý có thể là được sử dụng để bao gồm hoặc loại trừ các chuỗi mã thông báo và có thể theo cách đó ảnh hưởng đến ý nghĩa của chương trình C#.

Đối với câu hỏi của bạn:

Nhưng tại sao lại là tiền xử lý thậm chí xem xét thẻ #region, tại sao nó tạo ra như là một chỉ thị tiền xử lý và không chỉ là một loại bình luận?

vùng rất hữu ích cho IDE mục đích (Visual Studio), nó sẽ rất khó khăn (nếu không muốn nói là không thể) để đạt được các tính năng tương tự sụp đổ/mở rộng mã mà không khu vực.(đây là dự đoán của tôi, chỉ là một thành viên của nhóm Dev từ Microsoft có thể trả lời này)

Region directive:

Không ý nghĩa ngữ nghĩa được gắn vào một khu vực; Các khu vực được dự định để sử dụng bởi lập trình viên hoặc bằng các công cụ tự động để đánh dấu một phần của mã nguồn. Thông báo được chỉ định trong một chỉ thị #region hoặC#endregion tương tự như vậy không có ý nghĩa ngữ nghĩa; nó chỉ phục vụ cho xác định khu vực. Các chỉ thị #region và #endregion phù hợp có thể có các thông báo trang khác nhau.

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