我正在开发一款带有RPG元素的游戏,目前正在做一个能力系统。在试图弄清楚我希望它如何工作时,我偶然发现了 System.Enum,这是我以前没有使用过的东西,但它似乎非常强大,能够存储我想要的任何枚举。我想知道它是否有缺点?编译器是否仍然在幕后进行强制转换或其他操作来确定它是什么类型的枚举?不知道如何自己弄清楚,很难找到答案,或者至少是我能理解的答案。
public class TestingStuff
{
private void ExampleOne()
{
System.Enum anyEnum = Vehicle.Car;
switch (anyEnum)
{
case Vehicle.Car:
//do stuff
break;
}
}
private void ExampleTwo()
{
Vehicle thisEnum = Vehicle.Car;
switch (thisEnum)
{
case Vehicle.Car:
//do stuff
break;
}
}
private enum Vehicle
{
Car
}
}
那么在这个例子中,ExampleOne()和ExampleTwo()会以同样的方式执行吗?在游戏中,我将有多个人工智能角色,他们必须以这种方式进行多次能力检查,以确定哪种能力最适合这种情况。我不希望在任何单个帧中达到超过 10-20 个这样的调用,所以我认为这不是一个问题,但它仍然让我好奇,我想了解更多。
转换为
System.Enum
会导致装箱操作(如评论中指出的)。
如果您想要一种有效的方式来存储任何枚举,您可以使用 int,这会带来无开销。这是因为枚举实际上在幕后存储为整数。
private void ExampleThree()
{
int thisEnum = (int)Vehicle.Car;
switch ((Vehicle)thisEnum)
{
case Vehicle.Car:
//do stuff
break;
}
}