2008-12-05 30 views
5

Kiểm tra thử nghiệm này:Trở bộ sưu tập trống

[TestFixture] 
public class Quick_test 
{ 
    [Test] 
    public void Test() 
    { 
     Assert.AreEqual(0, GetByYield().Count()); 
     Assert.AreEqual(0, GetByEnumerable().Count()); 
    } 

    private IEnumerable<string> GetByYield() 
    { 
     yield break; 
    } 

    private IEnumerable<string> GetByEnumerable() 
    { 
     return Enumerable.Empty<string>(); 
    } 
} 

Khi tôi viết các phương pháp còn sơ khai tôi thường sử dụng cách Enumerable.Empty để làm việc đó. Tôi tình cờ gặp một số mã cũ tôi đã viết nơi tôi đã làm nó theo cách mang lại lợi nhuận.

này đã cho tôi tự hỏi:

  • Đó là trực quan hơn để hấp dẫn các nhà phát triển khác?
  • Có bế tắc ẩn nào khiến chúng ta thích cái này hơn cái kia không?

Cảm ơn!

+0

Không liên quan trực tiếp đến câu hỏi; nhưng dường như bạn sử dụng MbUnit, có một xác nhận chuyên dụng để xác minh các liệt kê rỗng: Assert.IsEmpty (GetByYield()). Nó có thể dễ đọc hơn so với việc sử dụng xác nhận bình đẳng cổ điển đối với số lượng mục. –

Trả lời

6

Tôi muốn bất kỳ phương pháp mang lại sự rõ ràng ý nghĩa cho các nhà phát triển. Cá nhân, tôi thậm chí không biết thời gian nghỉ của là gì; Đường dây, vì vậy trả về 'Enumerable.Empty(); `sẽ được ưu tiên hơn trong bất kỳ cơ sở mã nào của tôi.

+2

Tôi * làm * biết những gì phá vỡ năng suất nào, nhưng tôi vẫn nghĩ Enumerable.Empty() là một biểu hiện rõ ràng hơn về ý định. –

1

Thậm chí nhanh hơn có thể là:

T[] e = {}; 
return e; 
+0

Điều đó va chạm chúng ta từ một lớp lót đến hai. Có lẽ đây sẽ là một sự thay thế khác theo cùng suy nghĩ đó? trả lại chuỗi mới [0]; – Rob

4

Enumerable.Empty: tài liệu tuyên bố rằng nó "lưu trữ chuỗi trống". Reflector xác nhận. Nếu hành vi lưu vào bộ nhớ đệm quan trọng đối với bạn, có một lợi thế cho Enumerable.Empty

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