C# 将所有枚举保存在一个位置是一个好主意吗?

C# 将所有枚举保存在一个位置是一个好主意吗?,c#,.net,C#,.net,在构建类库时,我通常创建一个文件Enums.cs来保存程序集中使用的所有枚举。以下是一个例子: namespace MyNamespace { public enum Colors { Red, Green, Blue } public enum Shapes { Circle, Square, Triangle } } 这使得我所有的枚举都很容易找到

在构建类库时,我通常创建一个文件Enums.cs来保存程序集中使用的所有枚举。以下是一个例子:

namespace MyNamespace
{
    public enum Colors
    {
        Red,
        Green,
        Blue
    }
    public enum Shapes
    {
        Circle,
        Square,
        Triangle
    }
}
这使得我所有的枚举都很容易找到,组织得很好,并且很容易在代码中访问


我想知道这不是一个好主意的原因是什么?

我们通常有一个完整的项目、程序集,其中包含所有常量、枚举和助手方法

因此,是的,我建议将它们放在一个中心位置,方便访问


这将允许您从其他程序集轻松访问程序集,尽量避免循环引用。

我个人认为这不是一个好主意。我更喜欢将枚举保存在自己的文件中(每个已定义的枚举一个文件),就像类一样。这使得(对我来说)如果我正在寻找一个类型,按名称,应该去哪里变得更加明显。我对待枚举就像对待类、结构或任何其他命名空间范围的类型一样,这对我来说意味着每个文件只有一种类型

如果在项目中定义了许多枚举,“一个文件”可能会变得相当大,那么这种方法的主要缺点就会出现


然而,编译后的IL没有技术上的差异。这实际上更像是一种个人的、组织的策略。

通常最好按模块化而不是按种类来安排定义。

我认为这取决于它们适用于代码的哪些方面。如果我查看某个特定类中的函数,我希望相关联的枚举在附近。

那么,您可以对所有委托类型、所有类和所有结构应用相同的推理

通过根据它们对编译器的重要性对它们进行分组,您将失去以对您有意义的方式对它们进行分组的机会。编译器已经知道如何根据它们在语言中的含义来处理它们


就我个人而言,当我想找到与“解析器”而不是“配置对话框”相关的声明时,我会去保存该特性代码的地方。根据我使用的语言功能,我不必查看五个不同的地方。

我更喜欢名称空间组织。VisualStudio使导航到对象声明变得太容易了。对我来说,在MyData名称空间中有一个与数据库/数据访问相关的枚举比一些通用的枚举名称空间更有意义,因为我不太关心文件名。

有些代码文件名会立即对我发出警告。与
utils.cpp
helpers.vb
(或诸如此类)一起,如果我看到
enums.cs
,我会立即质疑软件是否与枚举过度耦合

枚举应谨慎使用,并在与之关联的叶(类型耦合最少)类型附近声明


我经常看到大型系统由于共享枚举而变得过度耦合。过不了多久,就会有人想出一个聪明的主意来枚举所有数据库主键。

我是一名java开发人员,但我想我也可以在这里回答

对我来说这不是个好主意。就像Daniel Earwicker说的你可以在课堂上做同样的事情。。。您可以在一个文件中使用许多内部类来处理整个应用程序(我假设在C中,就像在Java中一样,您可以使用内部类…),但您无论如何都不会这样做

枚举有时可能是更复杂的结构,它可以有属性

Java中的一个(非常)简单的示例:

public enum JobPriority {
    HIGH(5),
    MEDIUM_HIGH(4),
    MEDIUM(3),
    MEDIUM_LOW(2),
    LOW(1)
    ;
    private int level;
    JobPriority(int level) {
        this.level = level;
    }
    public int getLevel() {
        return level;
    }
}
我在一个很大的法国网站上工作,我们的枚举结构比那个复杂得多。。。如果我们把所有的枚举都放在一个文件中,这个文件将有数百行

因此,如果您的应用程序很小且枚举结构不复杂,则可以将它们全部放在一个文件中

但您更愿意将复杂的枚举放在单个文件中的枚举名称空间(java包)中,并在需要时为应用程序的每个功能部分创建一个枚举名称空间。对于简单枚举,为什么不将其添加到给定命名空间的公共枚举文件中(您可以有多个公共枚举文件)。不知道这是否是一个好的做法

有许多枚举文件对您真的很重要吗? 如果您需要查找枚举,您的IDE可能会为您提供快速的类搜索,以便轻松查找枚举否?您还可以使用xxxEnum.cs作为所有枚举的后缀来区分它们(还可以通过类名*Enum快速查找它们)


在我正在开发的JavaWebApp中(大约200万行代码,数百个枚举),我们可以在Eclipse IDE中轻松找到枚举,并使用快捷键ctrl+shift+R+*Enum。这比使用普通的枚举文件要快得多:)

我总是把所有的枚举都放在一个地方,否则当我准备外出时就找不到它们了。他们都在前门的碗里。有很多好答案,谢谢大家。。。虽然它似乎很大一部分归结为个人偏好,但我确实认为,不是按种类而是按模块化进行安排是很有意义的,并且符合框架本身的组织方式。听起来像是Cwalina开创性的“框架设计指南”中的内容,而且它获得了最多的支持票,所以我将其标记为答案……您将所有枚举放在一个单独的项目中?枚举将用于其他各种项目,是的。这是有意义的,但是我读到你的答案是说你所有的枚举都在一个单独的项目中(甚至是项目特定的项目)。我更喜欢逻辑上的分离,而不是在整个项目中混合使用。我不认为我会把它放在一个单独的项目中,但我可能会把它放在它自己的名称空间中,以使事情有条理。你的意思是,每个枚举一个文件?@kzen:Yeah-每个单独的文件。这些文件是否与其他类文件混合,或者您是否创建一个子文件夹来保存所有枚举文件?将它们放在单独的文件中还可以简化多次签出冲突解决和分支集成。所有IDE都是实际的