2009-06-09 7 views
5

Tôi đang gặp khó khăn với quy tắc StyleCop SA1503 (CurlyBracketsMustNotBeOmitted).Bắt quy tắc StyleCop SA1503 CurlyBracketsMustNotBeĐược phép trở nên linh hoạt hơn

Trong mã của tôi, tôi khá thường xuyên có một mô hình như sau:

public void SomeFunction(string someArg) 
{ 
    if (string.IsNullOrEmpty(someArg)) throw new ArgumentNullException("someArg"); 

    // rest of the function here 
} 

Lý do đằng sau này là để tiết kiệm không gian thẳng đứng khi thực hiện nhiều kiểm tra xác nhận trên một đối số duy nhất và/hoặc kiểm tra trên nhiều tranh cãi. Logic trong kiểm tra như vậy thường đơn giản và súc tích và tương tự như vậy đối với ngoại lệ bị ném.

Tuy nhiên, tôi sẽ bao giờ ghi

if (someConditional) 
    DoSomeStuff(); 

tôi sẽ luôn viết

if (someConditional) 
{ 
    DoSomeStuff(); 
} 

Vì vậy, trong bản tóm tắt:

  • Sử dụng dấu ngoặc nhọn nếu câu lệnh if được chia trên nhiều dòng
  • Không sử dụng dấu ngoặc nhọn để xác thực đối số đơn giản, v.v. có thể dễ dàng (và dễ đọc) được đặt trên một dòng

StyleCop có thể giúp tôi ở đây không?

+0

@Richard E: cuối cùng bạn đã làm gì? Tôi không muốn giải thể quy tắc, nhưng tôi muốn viết các điều kiện tiên quyết của tôi như mô hình bạn mô tả. –

+0

@Lieven: Hiện tại chúng tôi đã để nguyên quy tắc này và quyết định sử dụng dấu ngoặc nhọn trên các điều kiện một dòng của chúng tôi. Để kết thúc này, chúng tôi đã tắt quy tắc StyleCop SA1501. –

+0

OffTopic: không ném ArgumentNullException nếu biến là chuỗi rỗng, bạn nên sử dụng nó chỉ cho tham số null –

Trả lời

7

Như đã đề cập, các quy tắc StyleCop không tự nguyện được bật hoặc tắt và không thể tùy chỉnh. Nó sẽ là tốt đẹp để có một cách đơn giản của các quy tắc tùy biến nhưng tiếc là bạn sẽ cần phải viết chúng từ đầu. Cách tôi đã sử dụng StyleCop là tập trung vào việc sử dụng càng nhiều quy tắc dựng sẵn càng tốt và nơi tôi thực sự có vấn đề cơ bản với quy tắc (ví dụ: tài liệu mã), tôi chỉ cần tắt nó đi. Tôi không quan tâm đủ về các ngoại lệ để đi đến mức độ viết các quy tắc tùy chỉnh.

+1

hoàn toàn đồng ý; chúng tôi đã thấy rằng một vài tuần điều chỉnh cho một "chỉ cần làm những gì stylecop nói và ngừng tranh luận với nó" thái độ đã dẫn đến nhiều năm căng thẳng-miễn phí, rất dễ đọc mã. –

3

StyleCop (và tôi đồng ý ở đây) muốn bạn chia thành nhiều dòng. Nó không giống như các câu lệnh trên một dòng, vì lý do chính đáng (có thể cho là) ​​- điều này gây ra một mẫu sử dụng không nhất quán cho các câu lệnh if, đó là một trong những lý do mà quy tắc tồn tại ngay từ đầu.

Để nhận được hành vi bạn đang hiển thị, bạn có thể cần phải sử dụng SDK để viết quy tắc tùy chỉnh của riêng mình cho trường hợp cụ thể đó và sau đó tắt quy tắc mặc định.

+0

suy nghĩ về lý do chính đáng là gì? Tôi đã ưu tiên sử dụng dòng đơn nếu các câu lệnh ở đầu các hàm trong một thời gian dài. ví dụ: 'if (data.empty) return;' Có vẻ hơi kỳ lạ là 3 dòng. – basher

+0

@basher Như đã đề cập "điều này gây ra một mô hình sử dụng không phù hợp cho các câu lệnh" - cho dù đó là một vấn đề hay không là đáng tranh cãi, nhưng đó là một lý do có khả năng có giá trị –

+0

Đủ công bằng. Cảm ơn Reed. – basher