更改枚举值

Change value of Enum

我正在阅读有关 Enums 的文章,并遇到了一个例子,作者展示了我们如何 typecast 一个 enumint 和一个 intenum。但是我不知道如何通过创建 TrickScore.

类型的引用来更改枚举的值
public enum TrickScore {
     Sit = 7, 
     Beg = 25,
     RollOver = 50,
     Fetch = 10,
     ComeHere = 5,
     Speak = 30,
}

此代码块更改 Fetch 枚举的值。我无法理解分数如何设置为 TrickScore.Fetch。当我调用 score.ToString() 时,它 returns Fetch.

int value = (int)TrickScore.Fetch * 3;
MessageBox.Show(value.ToString());
TrickScore score = (TrickScore)value;
MessageBox.Show(score.ToString());

恐怕您对enums的理解不太正确。这行代码:

int value = (int)TrickScore.Fetch * 3;

不会更改 TrickScore.Fetch 的值。它将 TrickScore.Fetch (10) 的值乘以 3 并将其分配给变量 value。在这种情况下,您使用 TrickScore.Fetch 几乎就像它是一个保留数字的变量一样。当你有类似 y = x * 5 的东西时,你不会更改 x 的值。仅将结果分配给 y.

代码中执行某项操作的下一行是:

TrickScore score = (TrickScore)value;

因此,您从之前的操作中获得了变量 value (30)。您将该值转换为 TrickScore 枚举类型。具有此编号的项目是 Speak,它被分配给 score 变量。

值得注意的一件事是,仅仅因为 enum 继承自 int 并不意味着对 enums 执行算术运算是一个好习惯。我会避免将它们投射到 ints 上并执行数学运算。毕竟将 TrickScore.BegTrickScore.ComeHere 相加并期望得到 TrickScore.Speak 真的有意义吗?