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

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

什么是关于枚举的一般意见被放在文件的命名空间,他们被消耗? 还是应该枚举真的生活在自己的CS文件?

编辑

我应该提到,虽然有问题的类使用这些枚举,但外部调用者也使用这些枚举。 换句话说,另一个类可以设置这些枚举。 所以他们不是在课堂上内部使用,否则这个问题将是一个明智之举。

我不会说“浪费”(额外的文件花费多less钱),但往往不方便。 通常有一个类与enum关系最密切,我把它们放在同一个文件中。

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

我更喜欢把每个枚举放在它自己的文件中(对于每个接口,类和结构,不pipe多小)。 这使得他们更容易find我从另一个解决scheme来的时间,或者还没有提及所讨论的types。

在每个文件中添加一个types也可以更容易地识别源代码pipe理系统中的变化,而无需进行区分。

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

但无论如何它们通常都是通过F12键find的。

问自己的问题是:在C#中有什么关于枚举types,指示我应该把它与所有其他types创build不同?

如果枚举是公开的,就应该像其他任何公共types一样对待。 如果它是私有的,则将其声明为使用它的类的嵌套成员。 将两个公共types放在同一个文件中没有任何理由,只是因为它是一个枚举。 这是一个公共types的事实是重要的; types的味道没有。

将每个types(类,结构,枚举)放在其自己文件中的另一个优点是源代码pipe理。 您可以轻松获取该types的整个历史logging。

我主要放置在命名空间和类之外,这样就可以方便地访问下面这个命名空间中的其他类。

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

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

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

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

 enum SearchType { Forward, Reverse } 

如果枚举是一般的,可以被几个类用于不同的场景,那么我会倾向于把它放在它自己的文件中。 例如,下面可以用于几个目的:

 enum Result { Success, Error } 

这取决于需要什么访问。

如果枚举只能由一个类使用,那么可以在该类中声明它,因为您不需要在其他地方使用它。

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

我倾向于把枚举放在他们自己的文件中,原因很简单:就像类和结构一样,如果要查找types的定义,在同名的文件中, 确切知道在哪里查找是很好的。 (公平地说,在VS中你总是可以使用“去定义”)。

显然,它可能会失控。 我工作的同事甚至为委托人制作单独的文件。

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

如果枚举独立于原始类,那么将它放在一个单独的文件中将使未来的更改变得更容易。

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

对于小型解决scheme来说,这并不重要,但对于大型解决scheme来说,将类和枚举保存在自己的文件中变得更加重要。 您可以快速find它们,编辑它们等。 我强烈build议把你的枚举放在自己的文件中。

正如前面所说的那样……浪费的文件最终只有几kb而已?

我喜欢有一个名为E的公共枚举文件,其中包含每个单独的枚举,然后任何枚举都可以用E访问,并且它们在一个地方pipe理。

如果在一个解决scheme中有多个项目。 然后更好地创build另一个项目Utilities 然后创build一个Folder \Enumerations并创build一个嵌套的static class 。 然后分配每个静态类,在那里你将创build对应于你的项目名称的枚举。 例如,你有一个名为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 } 

那么整个解决scheme中可以使用的整个枚举将在每个项目上声明。 使用# region分隔每个关注点。 这样,查找任何枚举就更容易了