像枚举,但对象

时间:2010-07-05 22:45:22

标签: c#

我有一个自定义类“错误”和一些预先创建的错误(我们称之为A,B和C)。现在我喜欢将这些预先创建的组合在一个组下(例如,“StockErrors”)并使用它们类似于枚举:

private void SomeFunction(Error NewError)
{
    if (NewError == StockErrors.A) DoSomething(); // this is what I need.
}

我有什么想法可以做到这一点?这可能是非常简单的......

提前致谢!

2 个答案:

答案 0 :(得分:4)

创建名为static的{​​{1}}类,其中StockErrors类型的public static readonly字段已初始化为适当的值。 (您也可以使用属性)

根据您的Error课程,您可能还需要覆盖Error==!=Equals才能使用值语义。

答案 1 :(得分:1)

这样的事情:

public static class StockErrors
{
    public static readonly Error A = new Error("A");
    public static readonly Error B = new Error("B");
    public static readonly Error C = new Error("B");
}

这是最简单的死亡声明,虽然它暴露了通常被视为不良形式的字段。为了使其更可接受,您可以将字段声明为private,然后在public static属性中公开它们。

此外,如果您的Error类不能仅基于常量值构造,那么您需要在静态构造函数中初始化变量。下面是一个示例,其中值由属性公开并在静态构造函数中初始化:

public static class StockErrors
{
    private static readonly Error a;
    private static readonly Error b;
    private static readonly Error c;

    public static Error A { get { return a; } }
    public static Error B { get { return b; } }
    public static Error C { get { return c; } }

    static StockErrors()
    {
        a = new Error(...);
        b = new Error(...);
        c = new Error(...);
    }
}