2011-09-02 6 views
7

Đôi khi tôi thấy mình suy nghĩ nên dùng từ gì khi giới thiệu một số IEnumerable<Foo>. Tôi không nghĩ tôi thấy một cái tên nhất quán khi đọc.Bạn gọi IEnumerable là gì <Foo>?

IEnumerable<Foo>: Đó là tên loại. Nó không phải là hữu ích khi suy nghĩ hoặc sử dụng trong một câu.

Bộ sưu tập: Hợp lệ nhưng không được sử dụng ở mọi nơi. Mặc dù chúng ta có không gian tên System.Collections.

Trình tự: Cũng hợp lệ và có thể xác định tốt hơn.

ĐTV hoặc Iterator: Chúng nhấn mạnh hoạt động, hiếm khi được sử dụng.

Điều gì sẽ phù hợp nhất? Bạn đọc nó trong mã của bạn là gì?

+0

Tôi đang tham chiếu chủ yếu dưới dạng bộ sưu tập ** ** :) – Samich

+0

đánh dấu yêu cầu CW theo OP –

+0

Tôi thường tham khảo một số Foo :-) Vì vậy, một chuỗi . – xanatos

Trả lời

7

Một IEnumerable<Foo>không một iterator/Enumerator - đó là một khái niệm riêng biệt cho các thiết bị mà lặp nó.

Bộ sưu tập thường đề cập đến một thiết bị cụ thể cho phép các hoạt động như thêm/xóa; không áp dụng ở đây, nhưng thuật ngữ không phải là không hợp lý.

Cá nhân tôi có xu hướng sử dụng "chuỗi" trong cuộc thảo luận, nhưng tôi không sử dụng điều đó để đặt tên mọi thứ trong mã - tôi chỉ sử dụng thứ mà đại diện cho, tức là "đơn hàng", "uniqueUsers" , vv - hoặc trong trường hợp các phương pháp chung, "các mục", "các giá trị", v.v.

+0

Xem thêm [Câu hỏi liên quan đến IEnumerable và IEnumerator] (http://stackoverflow.com/questions/4548464/question-regarding-ienumerable-and-ienumerator/4550191#4550191). – Brian

6

Tôi chắc chắn nghiêng về phía trình tự. Trong tâm trí của tôi, bộ sưu tập là hữu hạn và IEnumerable<Foo> có thể đại diện cho một chuỗi các giá trị được tạo ra nhanh chóng và do đó nó có thể đại diện cho một chuỗi vô hạn giá trị.

+0

Trình tự không phải là xấu, nhưng không phải tất cả các chuỗi đều thực hiện bất kỳ hình thức nào của IEnumerable. "Chuỗi tái sử dụng" sẽ là mô tả tiếng Anh-ish ưa thích của tôi; một số trình tự tái sử dụng không triển khai thực hiện IEnumerable, nhưng vì hầu hết các chuỗi không thực hiện IEnumerable không thể tái sử dụng được, tôi nghĩ rằng "có thể tái sử dụng" là một tính từ hữu ích. – supercat

2

Có tiền lệ để đề cập đến nó bằng văn bản là "một IEnumerable của Foo". Ví dụ: this MSDN page đề cập đến "một IEnumerable của XElement".

Bằng lời nói, tôi có thể nói "Một IEnumerable of Foo" hoặc "Enumerable of Foo".

1

Cho đến nay, cách rõ ràng nhất và rõ ràng nhất để mô tả một biến, tham số, hoặc trường kiểu "IEnumerable <Foo>" là để gọi nó là một "IEnumerable <foo>", "IEnumerable (Tất foo)", hoặc "IEnumerable of foo". Là một lập trình VB, tôi thích cú pháp ở giữa, đặc biệt vì nó không sử dụng các dấu câu có thể bị nhầm lẫn với việc đánh dấu HTML; khi nói, dạng thứ hai sẽ là cách phát âm tự nhiên nhất (với chữ "I" đầu tiên biểu diễn âm tiết riêng của nó), trừ các trường hợp liên quan đến generics lồng nhau, khi các tín hiệu phát âm khác có thể được yêu cầu để biểu thị chính xác.

Một số lớp thực hiện chung hoặc không chung chung (*) Giao diện IEnumerable là bộ sưu tập, nhưng một số thì không. Một số là vòng lặp; một số thì không. Do đó, thuật ngữ "collection" và "iterator" không thực sự phù hợp trừ khi người ta biết rằng một IEnumerable cụ thể sẽ thực sự là một bộ sưu tập hoặc trình lặp.Thuật ngữ "iterator" có một vấn đề bổ sung, được chia sẻ bởi thuật ngữ "sequence": không phải tất cả các trình vòng lặp hoặc trình tự thực hiện IEnumerable; một số thực hiện IEnumerator, và một số thực hiện một phương pháp GetEnumerator nhưng không thực hiện IEnumerable (ví dụ bởi vì họ muốn cho phép "foreach" nhưng không muốn hứa hẹn tất cả các hành vi ngụ ý của IEnumerable). Nếu người ta muốn tránh biệt ngữ, thuật ngữ "chuỗi tái sử dụng" có thể là một thuật ngữ tốt. Nó không hoàn toàn rõ ràng, vì nó có thể tham chiếu đến các lớp có phương thức GetEnumerator nhưng không thực hiện IEnumerable, hoặc có thể đối với các đối tượng IEnumerator mà phương thức Reset thực sự đặt lại đếm, nhưng nó loại trừ các trình vòng lặp dùng một lần.

(*) Thuật ngữ "IEnumerable" từ đây trở đi sẽ tham chiếu đến IEnumerable và IEnumerable <T> thay thế cho nhau. Tương tự như vậy "IEnumerator".

0

Sử dụng nó trong một câu (mã).

IEnumerable<Foo> myFoos = GetFoos(); 
    //internal vocalization: get some Foos, assign them to myFoos 

Tôi nghi ngờ rằng hầu hết các lập trình viên sẽ không phát âm nội bộ loại trong tuyên bố/phân bổ biến.

public IEnumerable<Foo> ProcessFoos(IEnumerable<Foo> source) 
    //internal vocalization: The method requires some foos and returns some foos. 

Tôi đoán tôi sử dụng "một số" làm giọng hát nội bộ của mình. Có lẽ bất kỳ từ số nhiều nào sẽ hoạt động. Hàng loạt, đoạn, bó, đàn, nhiều, v.v.