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

Fin*_*las 172 c# enums coding-style

我有一个使用枚举的类,枚举当前在它自己的文件中,这看起来很浪费.

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

编辑

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

Jam*_*ran 98

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

  • @Finglas - 一个人的吵闹声是另一个人的信号! (111认同)
  • 它在浏览时会给目录增加噪音,这就是我所说的浪费. (7认同)
  • 通常有一个类关系最紧密.但是如果这种情况发生了变化,如果有人一次出现决定依赖枚举,那么它就是重构的时候了. (6认同)
  • 如果要在不同的类之间共享枚举,最好将其放在单独的文件中。 (2认同)

Jef*_*nal 74

这只是一个偏好问题.

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

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

  • "在每个文件中放置一种类型也可以更容易地识别源控制系统中的变化而不会出现差异." 对差异的恐惧不应成为您设计决策的基础.我甚至认为,任何不知道如何在源代码控制中正确区分文件的人都不会真正使用源代码控制. (10认同)
  • 不。我在这里看不到恐惧。拥有便利性和可读性总是好的,这会提高工作效率。拥有组织良好的代码库可以减少花在差异和冲突上的时间。@丹贝查德 (2认同)

Fre*_*örk 59

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

F12无论如何,它们通常都是通过钥匙找到的.

  • 我认为这可能是最好的选择,因为它:1)只有一个文件而不是许多文件可以被认为是杂乱的目录2)清楚文件中包含的内容3)意味着你知道在哪里找到一个`enum `而不是它在一个包含一个相关但不是_必要的类的文件中,而是使用它的唯一类 (4认同)
  • 我绝对不喜欢这个.正如James Curran的回答所说,enums主要与课程有关.将它们全部放在一个全局文件中时,它们甚至不再存在于主题所属的目录(对于子命名空间)中. (4认同)
  • 是的@DebugErr,我同意你的看法.由于这个答案是在2010年发布的,我已经在各种方法之间进行了更改,并且往往每种类型使用一个文件,或者在与相关类相同的文件中声明枚举. (3认同)
  • @Ray“...枚举主要与类有关系。”。这就是你失去我的地方。请举例说明如何处理与多个类有关系的枚举? (2认同)

Bry*_*tts 44

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

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


Tom*_*ier 23

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


Ade*_*eel 18

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

namespace UserManagement
{
    public enum UserStatus { Active, InActive }
    class User
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)


Nik*_*kis 11

一般来说,我更喜欢我的枚举与Class相同的文件,它很可能是它的一个属性.例如,如果我有一个类,Task那么枚举TaskStatus将在同一个文件中.

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

  • @mko - 这就是为什么我说(早在 2010 年我回答这个问题时)如果枚举具有更通用的性质,我将它们保存在单独的文件中。根据上下文,我的意思是,在某些情况下,某些枚举可能位于单独的文件中,而在其他情况下,我可能会将一组枚举声明分组在一个文件中。 (3认同)

Jon*_*gel 9

这取决于需要什么访问.

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

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


小智 8

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

enum SearchType { Forward, Reverse }
Run Code Online (Sandbox Code Playgroud)

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

enum Result { Success, Error }
Run Code Online (Sandbox Code Playgroud)


Dan*_*Tao 6

我倾向于把枚举在自己的文件中,原因很简单:与类和结构,这是很好的知道究竟哪里看,如果你想找到一个类型的定义:同名的文件中.(公平地说,在VS中你总是可以使用"转到定义".)

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


Dou*_*son 6

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

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


小智 6

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

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

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


vbp*_*p13 6

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

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

任何使调试更容易的东西,我都喜欢。