2015-12-02 34 views
45

Trong C# chúng ta có thể phân biệt việc thực thi mã tùy thuộc vào loại xây dựng. Theo mặc định, chúng tôi đã xác định loại Gỡ lỗi và Phát hành.
Chúng ta có thể làm điều đó bằng cách sử dụng #if chỉ:Hoặc toán tử trong thuộc tính Điều kiện trong C#

#if DEBUG 
    public void Foo() 
    { ... } 
#endif 

Nhưng chúng ta cũng có thể sử dụng Conditional thuộc tính:

[Conditional("DEBUG")] 
public void Foo() 
{ ... } 

Giải pháp thứ hai thậm chí còn tuyên bố là dễ bảo trì hơn (xem: Effective C# bởi Bill Wagner).

Câu hỏi của tôi là - làm cách nào tôi có thể sử dụng thuộc tính Conditional với nhiều cấu hình xây dựng? Có thể bằng cách nào đó sử dụng toán tử or không? Tôi hỏi vì tôi muốn một số phương pháp Foo được thực hiện cả trong, ví dụ, các cấu hình DEBUG và BAR build. Vậy thì sao?

+2

Chỉ cần áp dụng nó nhiều lần, như được hiển thị trong ví dụ trong [tài liệu] (https://msdn.microsoft.com/en-us/library/system.diagnostics.conditionalattribute (v = vs.110) .aspx) –

+2

Vâng, có thể ('AttributeUsageAttribute' cho' ConditionalAttribute' có 'AllowMultiple' được đặt thành' true') tuy nhiên xin lưu ý rằng hai ví dụ của bạn hoạt động rất khác nhau (ngay cả khi bạn di chuyển '#if DEBUG' bên trong phương thức) khi có các tham số liên quan. –

+0

@AdrianoRepetti Bạn có thể giải thích cách họ sẽ thực hiện khác nhau không? – Vlad274

Trả lời

50

Bạn có thể sử dụng nhiều dấu phẩy tách ra thuộc tính có điều kiện như

[Conditional("DEBUG"), Conditional("BAR")] 

và nó sẽ được hành vi chính xác mong muốn của bạn - họ sẽ được một cách logic ORed với nhau.

Xem MSDN để tham khảo.

+1

Lưu ý [tham chiếu MSDN] (https://msdn.microsoft.com/en-us/library/z371wyft.aspx#Conditional) cũng trả lời câu hỏi tiếp theo rõ ràng: Bạn và 'Điều kiện' như thế nào? –

+0

AND thực sự ở đó nhưng tôi không thích cách nó được thực hiện bởi vì bạn kết thúc các phương thức làm tổ có thể được, vô tình, được gọi là một nơi khác - vi phạm các thuộc tính có điều kiện. Có thể gói AND của bạn có điều kiện trong thuộc tính của riêng bạn cung cấp cho bạn một kết quả an toàn hơn. – MVCDS

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