【问题标题】:How do I avoid redundant enums defined in a C# Namespace?如何避免在 C# 命名空间中定义的冗余枚举?
【发布时间】:2014-04-19 13:15:19
【问题描述】:

在复习enums 时,我在MSDN Developer Network's site 遇到了以下问题。

通常最好在命名空间中直接定义一个枚举,这样 命名空间中的所有类都可以平等地访问它 方便。但是,枚举也可以嵌套在一个类中或 结构。

这是有道理的,因为我需要我的所有枚举都可用于我项目中的所有类。但是,我似乎找不到任何例子。到目前为止,这是我所拥有的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace myNamespace
{
    enum foo {A, B, C, D}
    enum foo2 {E, F, G, H}

    class Myclass
    {
          magicHappens();
    }
}

我想知道是否需要在此命名空间中包含的每个文件中都包含枚举,或者如果仅在一个文件中定义它会在编译时将这些枚举定义作为一个整体拉入项目中?是否有特定的课程需要参加?或者最好的做法是创建一个除了定义命名空间级枚举之外什么都不做的文件?

任何提示将不胜感激。

【问题讨论】:

    标签: c# enums namespaces


    【解决方案1】:

    在自己的源文件中定义每个枚举(例如foo.cs)。只要命名空间与您的类相同,它就可以在您的其他代码文件中使用。

    Foo.cs:

    namespace myNamespace
    {
        public enum foo
        {
            A = 0,
            B,
            C,
            D,
        }
    }
    

    Foo2.cs:

    namespace myNamespace
    {
        public enum foo2
        {
            E = 0,
            F,
            G,
            H,
        }
    }
    

    等等

    【讨论】:

    • 这就是我要找的。这就说得通了。每个枚举作为命名空间中的一个单独的 .cs 文件。
    【解决方案2】:

    你说你在一个类中创建枚举,但你不是。这是一个类中的枚举的样子:

    namespace myNamespace
    {
    
        class Myclass
        {
            enum foo {A, B, C, D}
            enum foo2 {E, F, G, H}
            magicHappens();
        }
    }
    

    我认为您可能将类定义与文件混淆了。您可以在文件中放置任意数量的类、结构或枚举。

    【讨论】:

    • 是的...我将类定义与文件混淆了。还很早;没有足够的咖啡...... :) 将每个枚举放在单独的文件中的答案是我实际上试图问的问题的答案。我将编辑问题以澄清... :)
    【解决方案3】:

    通常最好在命名空间中直接定义一个枚举,这样 命名空间中的所有类都可以平等地访问它 方便。但是,枚举也可以嵌套在一个类中或 结构。

    您似乎误解了上述说法。它说在命名空间级别定义枚举而不是在另一个类型的范围内。

    这样做:

    namespace myNamespace
    {
        enum foo {A, B, C, D} //Note enum is outside the class 
    
        class Myclass
        {
            magicHappens();
        }
    }
    

    不要这样做:

    namespace myNamespace
    {
        class Myclass
        {
            magicHappens();
    
            enum foo //Note enum is inside the class
            {
               A,
               B,
               C,
               D
            }
        }
    }
    

    理想情况下,在这种情况下,您应该为枚举使用单独的“.cs”文件“foo.cs”。

    【讨论】:

      【解决方案4】:

      您可以使用public 访问修饰符定义您的enum,因此在其他程序集中您可以访问它们,顺便说一下您需要通过使用来引用它们的命名空间,如果您想让它们可见而不使用它们的命名空间您可以在例如System 命名空间中定义您的枚举,默认情况下在所有类中引用System,然后您不需要添加 nay using 语句,p.s.不推荐这种方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-02
        • 1970-01-01
        • 1970-01-01
        • 2011-10-28
        • 2011-06-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多