2015-04-15 14 views
12

Na przykład mam następującą flagę ENUM:Jak nazwać kolekcję flag?

[Flags] 
public enum Colors 
{ 
    Red = 1, 
    Green = 2, 
    Blue = 4 
}  

Według MS Guidelines:

DO stałe teksty nazwa flaga z mnogiej lub wyrażenia rzeczownikowe i proste teksty stałe z rzeczowników w liczbie pojedynczej rzeczowników lub fraz.

Używam tutaj formy liczby mnogiej. Teraz jest another guideline aby wymienić swoje zbiory w liczbie mnogiej:

DO właściwości Nazwa kolekcji z mnogiej wyrażenie opisujące elementy w kolekcji Zamiast korzystać z pojedynczą frazę a następnie „List” lub „Collection”.

Mam klasy coś takiego:

public class Foo 
{ 
    public IEnumerable<Colors> Colors { get; set; } 
} 

Problem polega na tym, że staje się bardzo kłopotliwe przy próbie pracy z oddzielnych elementów w tej kolekcji - oni również colors. Więc jak mam nazwać kolekcję flag wtedy?

EDIT:

Ok, przykład nie jest jasne, zgadzam się. Może to jest lepsze:

[Flags] 
public enum Operations 
{ 
    TextFormatting = 1, 
    SpellChecking = 2, 
    Translation = 4 
} 

public class TextProcessingParameters 
{ 
    public IEnumerable<Operations> Operations { get; set; } 
    // other parameters, including parameters for different operations 
} 

Po zakończeniu procesor tekstu, to ma kilka wyników - po jednym dla każdego operations w Operations kolekcji (już mylące), na przykład jeden dla SpellChecking i TextFormatting, a drugi tylko dla Translation.

+10

Jaki jest cel posiadania kolekcji oznaczeń flagą? –

+3

Rozważ wyliczenie operacji. Te operacje mogą być wykonywane jednocześnie lub równolegle. I mam zbiór takich wartości wyliczeniowych - operacja1 i opera2 działają jednocześnie, a operacja3 działa równolegle. Coś w tym stylu. –

+1

Nadal nie widzisz celu kolekcji, ponieważ możesz i/lub oznaczać flagami ... może lepszy przykład może pomóc? –

Odpowiedz

4

Zgadzając się z pytaniem komentuje, że coś nie czuje się całkiem dobrze, sugeruję, że jeśli nazwa enum jest wybrany dokładniej odzwierciedlać naturę „składnik” każdego przedmiotu, który może reprezentować, problem wydaje się zanikać.

Na przykład, oryginalny przemianowany:

[Flags] 
public enum ColorComponents 
{ 
    Red = 1, 
    Green = 2, 
    Blue = 4 
} 

public class Foo 
{ 
    public IEnumerable<ColorComponents> Colors { get; set; } 
} 

i zaktualizowanym przykładem przemianowany:

[Flags] 
public enum OperationComponents 
{ 
    TextFormatting = 1, 
    SpellChecking = 2, 
    Translation = 4 
} 

public class TextProcessingParameters 
{ 
    public IEnumerable<OperationComponents> Operations { get; set; } 
    // other parameters, including parameters for different operations 
} 

Można także wziąć nieco innego podejścia przez zmianę nazwy kolekcji odzwierciedlać kompozycyjną aspekt każdego pozycja w kolekcji:

[Flags] 
public enum Operations 
{ 
    TextFormatting = 1, 
    SpellChecking = 2, 
    Translation = 4 
} 

public class TextProcessingParameters 
{ 
    public IEnumerable<Operations> OperationSets { get; set; } 
    // other parameters, including parameters for different operations 
} 

Pierwsze podejście wydaje się s jednak nieco czystszy.

+0

Tak, pierwsze podejście wydaje mi się lepsze. –

1

Spodziewam się, że Operations będzie listą , a nie listę Operations. Niestety, nie można dwukrotnie wykonać Operation.

Zatem zabrałbym pragmatyczne podejście wymyślić nowe słowo do swojej flagi enum, który jest

  • gramatycznie liczba pojedyncza ale
  • nadal reprezentuje kombinację poszczególnych wartości enum zamiast jeden z nich.

Ze względu na argument, nazwijmy enum OpCombination - połączenie operacji. Następnie można wymienić listę naturalnie:

public IEnumerable<OpCombination> OpCombinations { get; set; } 
+0

Cóż, skoro i tak muszę złamać pewne wytyczne, podoba mi się to podejście. –