Подтвердить что ты не робот

Как назвать коллекцию флагов?

Например, у меня есть следующее перечисление флага:

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

В соответствии с Руководством MS:

DO имена флагов перечисления с множественными существительными или существительные фразы и простые перечисления с сингулярными существительными или существительными фраз.

Итак, я использовал здесь множественную форму. Теперь существует другое руководство, чтобы назвать ваши коллекции во множественном числе:

Свойства коллекции имен DO с множественной фразой, описывающей элементы в коллекции, вместо использования особой фразы, за которой следуют "Список" или "Коллекция".

У меня есть класс вроде этого:

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

Проблема в том, что он очень запутан, когда я пытаюсь работать с отдельными элементами в этой коллекции - они также colors. Итак, как я должен называть коллекцию флагов?

EDIT:

Хорошо, пример не очень ясен, я согласен. Возможно, это лучше:

[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
}

После завершения текстового процессора он имеет несколько результатов - по одному для каждой operations в operations коллекции (уже запутанной), например. один для SpellChecking AND TextFormatting, а другой только для Translation.

4b9b3361

Ответ 1

Соглашаясь с комментарием вопроса о том, что что-то не совсем правильно, я бы предположил, что если имя перечисления выбрано более тщательно, чтобы отразить "компонентный" характер каждого элемента, который он может представлять, проблема, похоже, идет прочь.

Например, оригинал переименован:

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

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

И обновленный пример переименован:

[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
}

Вы также можете использовать несколько иной подход, переименовав коллекцию, чтобы отразить композиционный аспект каждого элемента в коллекции:

[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
}

Первый подход кажется немного более чистым.

Ответ 2

Я ожидал бы Operations как список Operation, а не список Operations. К сожалению, вы не можете дважды дублировать Operation.

Таким образом, я возьму прагматичный подход, придумаю новое слово для вашего перечисления флага, которое

  • грамматически единичный, но
  • по-прежнему представляет собой комбинацию индивидуальных значений перечисления, а не одну из них.

Для аргумента позвольте перечислить перечисление OpCombination - комбинацию операций. Затем вы можете назвать список естественно:

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