如何命名标志集合?

时间:2015-04-15 18:01:59

标签: c# enums

例如,我有以下标志枚举:

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

根据MS Guidelines

  

使用复数名词或名词短语以及带有单数名词或名词短语的简单枚举来命名标志枚举。

所以我在这里使用了复数形式。现在,another guideline以复数形式命名您的馆藏:

  

使用描述集合中项目的复数短语命名集合属性,而不是使用单个短语,后跟“列表”或“集合”。

我的课程类似:

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

问题是,当我尝试使用该集合中的单独项目时,它会变得非常混乱 - 它们也是colors。 那么我该如何命名一组标志呢?

修改

好的,这个例子不是很清楚,我同意。也许这个更好:

[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一个(已经令人困惑),例如一个用于SpellCheckingTextFormatting,另一个用于Translation

2 个答案:

答案 0 :(得分:4)

虽然同意问题评论说某些事情并不合适,但我建议如果更仔细地选择枚举名称以反映&#34;组件&#34;它可以代表的每个项目的性质,问题似乎消失了。

例如,原始重命名为:

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

第一种方法似乎稍微清洁一点。

答案 1 :(得分:1)

我希望Operations成为Operation的列表,而不是Operations的列表。不幸的是,您无法复数Operation两次。

因此,我采取务实的方法为你的旗枚举创造一个新词,这是

  • 语法单数但
  • 仍代表单个枚举值的组合,而不是单个枚举值。

为了论证,让我们调用枚举OpCombination - 一组操作。然后你可以自然地命名列表:

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