嵌套枚举样式和约定

Nested Enum Style and Convention

我有一个控制 class 操作方式的枚举。此枚举仅适用于 class,因此感觉它应该嵌套。但是,class 需要枚举的一个实例作为成员,理想情况下,它的名称应与枚举相同。当然,这是不可能的。

我最关心的是提供一个清晰明了的 API。我看到的两个选项是:

嵌套枚举并将实例成员或枚举本身命名为 'less than perfect'

将枚举放在 class 之外,这会有点但不会真正污染命名空间,并且可能会降低可发现性。 (现在写这篇文章,让我印象深刻的是发现能力可能不是问题,因为只有一个使用点,属性)。

是否有针对此类情况的公认惯例?这是说明用例的片段:

public class MultiModeActionFacadeObject : IAction
{
    public enum ActionMode // enum only applies to this class
    { 
        Fast,
        Accurate,
        Intermediate
    }

    private readonly IAction _accurate, _fast, _intermediate;

    internal MultiModeActionFacadeObject(IAction fastAction, IAction accurateAction, IAction intermediateAction)
    {
        _fast = fastAction;
        _accurate = accurateAction;
        _intermediate = intermediateAction;

    }

    // preference would be to call this member ActionMode, but obviously members can't share names
    // although I believe this could be accomodated, outside of static members, by some changes to 
    // qualification requirements. That's not the concern here though.
    public ActionMode Mode { get; set; } 

    public void DoWork(object onThis)
    {
        switch (Mode)
        {
            case ActionMode.Fast:
                _fast.DoWork(onThis);
                break;
            case ActionMode.Accurate:
                _accurate.DoWork(onThis);
                break;
            case ActionMode.Intermediate:
                _intermediate.DoWork(onThis);
                break;
        }
    }
}

将枚举放在 class 之外似乎更为常见。将其保留在内部意味着每次设置模式时最终都需要指定 ClassName.Enum:

var mma = new MultiModeActionFacadeObject(fastAction, accurateAction, intermediateAction)
            {
                Mode = 
                    MultiModeActionFacadeObject.ActionMode.Accurate
            };

此外,由于任何一种方式都有效,我认为这不是确定的 "answer"。我本来想对您的原始问题添加评论,但这需要 50 多个代表 :)