当值得将枚举转化为其价值时的情景

Abb*_*bas 2 c# enums casting

我在我的一个Windows应用程序中有枚举,如下所示:

private enum ModificationType
{
    Insert = 0,
    Update = 1,
    Delete = 2
}
Run Code Online (Sandbox Code Playgroud)

我有以下功能:

private void UpdateDatabaseTransactions(ModificationType _modifcationType)
        {
int modType = (int)_modifcationType;
if (modType == 0) {...}
if (modType == 1) {...}
if (modType == 2) {...}
Run Code Online (Sandbox Code Playgroud)

我也可以像下面这样使用它:

if (_modifcationType == ModificationType.Insert) {...}
if (_modifcationType == ModificationType.Update) {...}
if (_modifcationType == ModificationType.Delete) {...}
}
Run Code Online (Sandbox Code Playgroud)

两者之间以及在哪种情况下我必须对值和使用进行类型划分有什么区别,是否有使用上述任何一个的性能提升器,或者两者都相同?

Edw*_*son 6

当您决定ModificationType稍后更改枚举时会发生什么?例如:

private enum ModificationType
{
    Insert = 0,

    /* Oops, need a special insert type here */
    InsertSpecial = 1,

    Update = 2,
    Delete = 3
}
Run Code Online (Sandbox Code Playgroud)

诚然,这是一个人为的例子.(但肯定不是不可能的 - 假设你enum习惯于引用一些引入突破性变化的外部依赖,比如一个C API.)

但是如果按值引用这些枚举类型,则必须跟踪它们的所有引用.你想拖拽你的代码试图弄清楚数字3是用来引用枚举还是其他一些随机常数?

相反,您应该使用,ModificationType.Delete这样您就不必担心这些问题.enum毕竟,这就是为什么这种类型存在的原因.

使用ModificationType.Delete而不是4,5,6或其他可能发生的任何事情都没有性能损失.