0

我有两个成员 enum 发生了很多事情:

        enum  E{
            A,
            B
        }

假设我想根据我的枚举值为 i 分配一个不同的值。

我应该写这个:

        int i= (e== E.A)?0:1;

或这个 :

        int i;
        if (e==E.A)
            i=0;
        else if (e==E.B)
            i=1;
        else throw new NotImplementedException("Unknown enum member for E : " + e);

或者这个:

        int i;
        switch (e)
        {
            case E.A:
                i = 0;
                break;
            case E.B:
                i=1;
                break;
            default:
                throw new NotImplementedException("Unknown enum member for E : " + e);
        }

我通常选择第一个选项,因为它写起来更快,但我总是觉得有点不对劲。你平常都做什么?

我在 c# 中发布了代码,但这个问题与语言无关。

我真的不知道应该如何标记它,如果需要,请不要犹豫重新标记它。

编辑:也许我的问题还不够清楚:我真正想知道的是:我应该假设我的枚举永远不会改变并采用快速的方式,还是应该考虑它可能会改变(尽管我没有改变它然而),并添加一些错误处理代码,这样我就不用花费数周的时间来跟踪错误的位置(如果它发生了变化)

4

4 回答 4

3

从维护的角度来看,我会将第一个选项视为潜在的错误,并将其转换为 case 语句以使行为更加明确。我想这取决于代码的预期寿命——它存在的时间越长,你应该让它越明确。

于 2009-03-06T16:41:22.590 回答
1

如果将值添加到枚举中,则将语句添加到 switch 语句将比其他任何语句更容易。

于 2009-03-06T16:29:57.283 回答
1

这个问题确实语言有关,因为不同的语言处理枚举的方式不同。

由于错误处理,第一个版本与其他两个版本非常不同。如果您真的不在乎既不是 A 也不是 B 会发生什么,只需使用(在这种情况下):

int i = (int) e;

如果您想要的 int 值不直接匹配,我会选择 switch 语句,甚至可能使用字典(这会更慢,但使用 C# 3.0 集合初始化程序的代码更紧凑,并且会提供参数检查免费,如果您对它抛出的异常感到满意)。

于 2009-03-06T16:31:24.380 回答
0

最后一个是最佳实践。它更具可读性和可维护性。请不要使用第一个!

于 2009-04-29T15:49:26.570 回答