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

时间:2010-02-17 17:35:10

标签: c# coding-style enums

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

将枚举放在文件命名空间中的一般意见是什么?或者枚举真的应该存在于自己的cs文件中吗?

修改

我应该提一下,虽然有问题的类使用这些枚举,但外部调用者也是如此。换句话说,另一个类可以设置这些枚举。因此,他们不会在课堂内部使用,否则这个问题将毫无疑问。

15 个答案:

答案 0 :(得分:93)

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

答案 1 :(得分:70)

这实际上只是一个偏好问题。

我更喜欢将每个枚举放在自己的文件中(同样适用于每个接口,类和结构,无论多小)。当我来自另一个解决方案或者其他方面没有引用相关类型时,它更容易找到。

在每个文件中放置一种类型也可以更轻松地识别源控制系统中的更改而不会出现差异。

答案 2 :(得分:57)

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

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

答案 3 :(得分:41)

问自己的问题是:C#中的枚举类型有什么表明我应该区别对待我创建的所有其他类型吗?

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

答案 4 :(得分:22)

将每个类型(类,结构,枚举)放在自己的文件中的另一个好处是源代码控制。您可以轻松获取该类型的完整历史记录。

答案 5 :(得分:18)

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

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

答案 6 :(得分:11)

通常我更喜欢我的枚举与Class相同的文件,它很可能是它的属性。例如,如果我有一个班级Task,则枚举TaskStatus将位于同一个文件中。

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

答案 7 :(得分:9)

这取决于所需的访问权限。

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

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

答案 8 :(得分:8)

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

enum SearchType { Forward, Reverse }

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

enum Result { Success, Error }

答案 9 :(得分:6)

我倾向于将枚举放在他们自己的文件中,原因很简单:就像类和结构一样,很高兴知道完全在哪里查找是否要查找类型的定义:在同名文件。 (公平地说,在VS中你总是可以使用“Go to Definition”。)

显然,它可能会失控。我工作的同事甚至为代表们制作了单独的文件。

答案 10 :(得分:6)

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

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

答案 11 :(得分:6)

如果您正在使用Visual Studio的USysWare文件浏览器加载项,则可以在解决方案中快速查找特定名称的文件。想象一下,寻找一个不在自己的文件中的枚举,而是将其隐藏在一个巨大的解决方案中。

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

正如所说的那样......文件最终只有几个kb是多么浪费?

答案 12 :(得分:2)

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

答案 13 :(得分:1)

如果您在一个解决方案中有多个项目。然后更好地创建另一个项目Utilities。然后创建一个文件夹\Enumerations并创建一个嵌套的static class。然后分配每个静态类,您将在其中创建与项目名称对应的枚举。例如,您有一个名为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

}

然后将在每个项目的整个解决方案中使用整个枚举。使用#region分隔每个问题。通过这种方式,可以更容易地查找任何枚举

答案 14 :(得分:1)

分离文件非常简单的巨大优势。当任何对象在其自己的MyObjectName.cs文件中时...您可以转到解决方案资源管理器并键入MyObjectName.cs并正好显示1个文件。任何使调试更好的东西都很好。

类似注释的另一个优点是,如果你搜索一个名字的所有文件( ctrl + shft + F ),你可能会发现20个引用同一文件中的名称...并且找到的名称将是不同对象的一部分。在“查找结果”窗口中,您只能看到行号和文件名。您必须打开文件并滚动以找出找到的引用所在的对象。

任何使调试更容易的事情,我喜欢。