Как назвать коллекцию флагов?
Например, у меня есть следующее перечисление флага:
[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
.
Ответы
Ответ 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; }