发生了很多事情,我有两个成员枚举:
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#中发布了代码,但这个问题与语言无关。
我真的不知道应该如何标记,如果需要,请不要犹豫。
编辑:也许我的问题不够清楚:我真正想知道的是:我应该假设我的枚举永远不会改变并快速前进,或者我应该考虑它可能会改变(尽管我已经还没改变它,并添加一些错误处理代码,这样我就不会花费数周的时间来跟踪错误的位置,如果它发生了变化)
答案 0 :(得分:3)
从维护的角度来看,我会将第一个选项视为潜在的错误,并将其转换为case语句,以使行为更加明确。我想这取决于代码的预期寿命 - 它越长越好,你应该越明确。
答案 1 :(得分:1)
如果值被添加到枚举中,那么将语句添加到switch语句会比任何其他语句更容易。
答案 2 :(得分:1)
问题确实与语言相关,因为不同的语言处理枚举的方式不同。
由于错误处理,第一个版本与其他两个版本非常不同。如果你真的不在乎如果它既不是A也不是B会发生什么,只需使用(在这种情况下):
int i = (int) e;
如果你想要的int值不直接匹配,我要么去转换语句,要么甚至可能使用字典(这将更慢,但使用C#3.0集合初始化器更紧凑的代码,并将提供参数检查是免费的,如果你对它抛出的异常感到满意的话。)
答案 3 :(得分:0)
最后一个是最佳实践。它更具可读性和可维护性。 请不要使用第一个!