Tôi đã bắt đầu sử dụng một lớp xác định như sau:Defines.Debug vs # nếu DEBUG
internal sealed class Defines
{
/// <summary>
/// This constant is set to true iff the define DEBUG is set.
/// </summary>
public const bool Debug =
#if DEBUG
true;
#else
false;
#endif
}
Những lợi thế tôi thấy là:
- Đảm bảo tôi không phá vỡ thứ mà với #if .. # else .. # endif sẽ không được kiểm tra bởi trình biên dịch.
- Tôi có thể thực hiện tìm tham chiếu để xem nơi sử dụng.
- Thường hữu ích khi có một bool để gỡ lỗi, định nghĩa mã dài hơn/lộn xộn hơn.
có thể thiệt thòi tôi thấy:
trình biên dịch không thể tối ưu hóa mã không sử dụng nếu lớp Định nghĩa là trong lắp ráp khác. Đó là lý do tại sao tôi đã thực hiện nội bộ.
Tôi có thiếu bất kỳ nhược điểm nào khác không?
[Chỉnh sửa] Ví dụ điển hình của việc sử dụng:
private readonly Permissions _permissions = Defines.Debug ? Permissions.NewAllTrue()
: Permissions.NewAllFalse();
Hoặc:
var str = string.Format(Defines.Debug ? "{0} {1} ({2})" : "{0} {1}", actual, text, advance);
Bạn đã xem ['ConditionalAttribute'] (http://msdn.microsoft.com/en-us/library/system.diagnostics.conditionalattribute.aspx) chưa? – Oded
@Oded Cảm ơn, tôi đã thêm các ví dụ điển hình, chỉ là những sửa đổi nhỏ trong các dòng đơn, không phải toàn bộ các phương thức hay lớp mà ConditionalAttribute phù hợp, hoặc tôi không nên lười biếng và định nghĩa hai phương thức cho các dòng này? – weston
Điều gì sẽ xảy ra nếu assembly có chứa cái này được xây dựng trong 'Debug' nhưng những cái tham chiếu nó được xây dựng trong' Release'? – Oded