C#中的枚举是否应该有自己的文件?

C#中的枚举是否应该有自己的文件?,c#,coding-style,enums,C#,Coding Style,Enums,我有一个使用枚举的类,枚举当前在它自己的文件中,这似乎是浪费 对于将枚举放在使用它们的文件的命名空间中,一般的看法是什么?或者enum真的应该存在于它自己的cs文件中吗 编辑 我应该提到,虽然所讨论的类使用这些枚举,但外部调用程序也使用这些枚举。换句话说,另一个类可以设置这些枚举。因此,它们不会在课堂内部使用,否则这个问题就不需要动脑筋。这完全是一个风格问题。我倾向于在收集枚举声明的解决方案中有一个名为Enums.cs的文件 但它们通常都是通过F12键找到的。这实际上只是偏好的问题 我更喜欢将每

我有一个使用枚举的类,枚举当前在它自己的文件中,这似乎是浪费

对于将枚举放在使用它们的文件的命名空间中,一般的看法是什么?或者enum真的应该存在于它自己的cs文件中吗

编辑


我应该提到,虽然所讨论的类使用这些枚举,但外部调用程序也使用这些枚举。换句话说,另一个类可以设置这些枚举。因此,它们不会在课堂内部使用,否则这个问题就不需要动脑筋。

这完全是一个风格问题。我倾向于在收集枚举声明的解决方案中有一个名为
Enums.cs
的文件


但它们通常都是通过F12键找到的。

这实际上只是偏好的问题

我更喜欢将每个枚举放在它自己的文件中(同样,对于每个接口、类和结构,不管有多小)。当我来自另一个解决方案时,或者当我还没有对所讨论的类型的引用时,可以更容易地找到它们


在每个文件中添加一种类型也可以更容易地识别源代码管理系统中的更改,而不会产生差异。

我不会说“浪费”(一个额外的文件要花多少钱?),但这通常是不一致的。通常有一个类与枚举关系最密切,我将它们放在同一个文件中。

我希望有一个名为E的公共枚举文件包含每个单独的枚举,然后可以使用E访问任何枚举。。。而且它们都在一个地方进行管理。

一般来说,我希望我的枚举与它最有可能是其属性的类位于同一个文件中。例如,如果我有一个类
Task
,则枚举
TaskStatus
将位于同一个文件中


但是,如果我有更通用的枚举,那么我会将它们保存在不同的文件中。

我认为这取决于枚举的范围。例如,如果枚举特定于一个类,例如用于避免神奇常量场景的枚举,那么我会说将其与该类放在同一个文件中:

enum SearchType { Forward, Reverse }
如果枚举是通用的,并且可以由多个类用于不同的场景,那么我倾向于将它放在自己的文件中。例如,以下内容可用于多种用途:

enum Result { Success, Error }

我倾向于将枚举放在它们自己的文件中,原因很简单:与类和结构一样,如果要在同名文件中找到类型的定义,最好确切地知道应该在哪里查找。(公平地说,在VS中,您也可以使用“转到定义”。)


显然,它可能会失控。我的一位同事甚至为代理创建了单独的文件。

我主要将文件放在名称空间的内部和类的外部,以便可以轻松访问该名称空间中的其他类,如下所示

namespace UserManagement
{
    public enum UserStatus { Active, InActive }
    class User
    {
        ...
    }
}

要问自己的问题是:C#中的枚举类型是否表明我应该区别于我创建的所有其他类型来对待它


如果枚举是公共的,则应将其视为任何其他公共类型。如果它是私有的,则将其声明为使用它的类的嵌套成员。没有令人信服的理由仅仅因为一个是枚举就将两个公共类型放在同一个文件中。事实上,它是一个公共类型是最重要的;类型的风格不同。

为枚举使用单独文件的一个优点是,您可以删除使用枚举的原始类,并使用枚举编写新类


如果枚举独立于原始类,则将其放在单独的文件中会使将来的更改更容易。

将每种类型(类、结构、枚举)放在自己的文件中的另一个优点是源代码管理。您可以轻松获得该类型的整个历史记录。

这取决于需要什么访问权限

如果枚举仅由单个类使用,则可以在该类中声明它,因为您不需要在其他任何地方使用它


对于多个类或公共API中使用的枚举,我将始终将定义保存在适当名称空间中自己的文件中。找到这种方法要容易得多,而且该策略遵循每个文件一个对象的模式,这也适用于类和接口。

如果您使用的是用于Visual Studio的USysWare文件浏览器加载项,您可以在解决方案中非常快地找到特定名称的文件。想象一下,在一个巨大的解决方案中,寻找一个不在自己的文件中,而是埋在某个文件中的枚举

对于小型解决方案,这并不重要,但是对于大型解决方案,将类和枚举保存在它们自己的文件中变得更加重要。您可以快速找到它们、编辑它们,等等。我强烈建议将您的枚举放入它自己的文件中


如前所述。。。如果一个文件只剩下几kb,那么它到底有多浪费?

如果您在一个解决方案中有多个项目。然后最好创建另一个项目
实用程序
。然后创建一个文件夹
\Enumerations
,并创建一个嵌套的
静态类
。然后分配每个静态类,您将在其中创建与项目名称对应的枚举。例如,您有一个名为DatabaseReader和DatabaseUsers的项目,然后您可以将静态类命名为

public static class EnumUtility {
    #region --Database Readers Enum
    public static class EnumDBReader {
         public enum Actions { Create, Retrieve, Update, Delete}; 
    }
    #endregion

    #region --Database Users Enum
    public static class EnumDBUsers {
         public enum UserIdentity { user, admin }; 
    }
    #endregion

}

然后,可以在每个项目的整个解决方案中使用的整个枚举将在其上声明。使用#
区域
分隔每个关注点。这样,查找任何枚举就更容易了,分离文件的巨大优势非常简单。当任何对象位于其自己的MyObjectName.cs文件中时。。。您可以转到解决方案资源管理器并键入MyObjectName.cs,然后正好显示一个文件。任何使调试更好的东西都是好的

另一个类似的优点是,如果您在所有文件(ctrl+shft+F)中搜索一个名称,您可能会在同一个文件中找到20个对该名称的引用。。。那