2009-08-26 36 views
54

Bạn có sử dụng số ít hoặc số nhiều để liệt kê không? Tôi nghĩ rằng điều đó có ý nghĩa tốt nhất với số nhiều trong tuyên bốSố ít hoặc số nhiều cho bảng liệt kê?

enum Weekdays 
{ 
    Monday, 
    Tuesday, 
    Wednesday, 
    Thursday, 
    Friday, 
    Saturday, 
    Sunday 
} 

... nhưng tôi nghĩ nó có ý nghĩa hơn với số ít khi sử dụng loại, ví dụ:

Weekday firstDayOfWeek = Weekday.Monday; 

Tôi đọc đề xuất ở đâu đó để sử dụng số ít thông thường và số nhiều cờ, nhưng tôi muốn nghe thêm một số ưu và nhược điểm khác.

+0

Nên liệt kê, không liệt kê. –

+1

Liên quan: http://stackoverflow.com/questions/338156/table-naming-dilemma-singular-vs-plural-names – harpo

Trả lời

58

Ở đây nó là trực tiếp từ Microsoft:

http://msdn.microsoft.com/en-us/library/4x252001(VS.71).aspx

Sử dụng tên đặc biệt đối với hầu hết Enum loại, nhưng sử dụng một tên số nhiều cho Enum các loại là các trường bit.

+1

Với lưu ý rằng các trường bit nên được số nhiều. –

+2

Đây là phiên bản mới nhất của Hướng dẫn thiết kế liệt kê MSDN: http://msdn.microsoft.com/en-us/library/ms229058.aspx –

10

Trong Khuôn khổ .NET, hầu hết các enums "bình thường" (ví dụ: DayOfWeek) có tên số ít và các enums cờ (ví dụ: StringSplitOptions, BindingFlags) có tên số nhiều. Nó có ý nghĩa, vì giá trị của một enum cờ có thể đại diện cho nhiều mục nhưng đối với một enum không cờ, nó chỉ có thể đại diện cho một mục duy nhất.

18

Một đề nghị xuất phát từ NET Framework Design Guidelines, trang 59-60:

Do sử dụng một tên kiểu số ít cho một đếm, trừ khi giá trị của nó là chút lĩnh vực.

public enum ConsoleColor { 
    Black, 
    Blue, 
    Cyan, 
    ... 

Do sử dụng một tên loại số nhiều cho một điều tra với các lĩnh vực như chút giá trị, còn gọi là cờ enum.

[Flags] 
public enum ConsoleModifiers { 
    Alt, 
    Control, 
    Shift 
} 
-1

Đó là chủ quan và không có vấn đề gì bạn sử dụng, miễn là bạn phù hợp (cá nhân tôi sử dụng đơn lẻ như một của nó mang lại từ các công ước Sql tôi)

+8

Điều đó không quan trọng. Các quy ước khuyến khích khả năng đọc và bảo trì. Tính nhất quán cá nhân không so sánh với tính thống nhất thông thường. – grenade

+1

Khó nhất quán nếu mỗi thư viện có ý kiến ​​"chủ quan" riêng của họ. –

+1

Tôi đoán như Microsoft nói sử dụng số ít, chúng ta nên sử dụng số ít. Không. Miễn là bạn nhất quán với việc plualization và singularization (?) Của bạn, nó thực sự không quan trọng. –

1

Nói chung, tôi xem xét định nghĩa enum là định nghĩa kiểu, với các giá trị của enum là các giá trị khác nhau mà kiểu có thể có; do đó nó được một tên đặc biệt:

enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }; 

enum CoffeeSize { SMALL, MEDIUM, LARGE }; 
2

Microsoft recommends sử dụng tên ít nhất cho liệt kê trừ khi sử dụng thuộc tính Flags. Và như được lấy từ cuốn sách Hướng dẫn thiết kế khung, bạn không nên thêm các tên kiểu liệt kê với Enum, Flags, v.v. và bạn không nên tiền tố liệt kê các giá trị với một từ viết tắt hoặc viết tắt như đã được phổ biến với VB liệt kê trở lại trong ngày.

+0

Nhưng thực tế có lý do gì không? Chúng tôi tiền tố giao tiếp với 'tôi'. Tại sao không có tiền tố enums với 'E' và cờ với 'F'. Điều đó sẽ làm cho nó tinh thể rõ ràng. Lưu ý rằng tôi không thích tiền tố gì khác, nhưng đây là những trường hợp đặc biệt như giao diện mà loại sẽ không bao giờ thay đổi. –

2

Nói chung, tôi xem xét định nghĩa enum là định nghĩa loại, với các giá trị của enum là các giá trị khác nhau mà loại có thể có; do đó nó được một tên đặc biệt: enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY }; enum CoffeeSize { SMALL, MEDIUM, LARGE };

Yes.Nếu bạn có kinh nghiệm về tinh thần trong việc thực hiện enums như các lớp học, thì thực tế là bạn muốn sử dụng tên số cho loại sẽ tiết lộ rằng nó có ý nghĩa để sử dụng tên số ít cho các enums đó. Ví dụ:

struct Weekday {}; 

const Weekday SUNDAY; 
const Weekday MONDAY; 
const Weekday TUESDAY; 

...

void func (Weekday *day) 
{ 
    if (day == &SUNDAY) 
     ... 
} 

Đối với người thích số nhiều trong sự đếm, bạn sẽ đặt tên cho rằng struct Weekdays?

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