C#新手,谁能向我解释一下枚举和为枚举设置变量是如何工作的? [已关闭]

问题描述 投票:0回答:3

我确信这是一个非常简单的问题,但我正在学习如何用 C# 进行编程,这个文本冒险程序的“流程”对我来说非常有意义,但我很困惑第三行“私有状态”如何我的州;”有效。

如您所见,程序首先将变量 myState 设置为 States.cell,它调用一个 void 方法(下面未显示),该方法等待更改变量“myState”的键,从而更新更新函数。

我的问题是,“enum”类是如何工作的?似乎可以从“enum States”行创建一个变量,但我不明白为什么会这样。抱歉,如果这是一个非常愚蠢的问题。

这是代码:

public Text text;
private enum States {cell, sheets_0, mirror, lock_0, sheets_1, cell_mirror, lock_1, freedom};
private States myState;

// Use this for initialization
void Start () {
    myState = States.cell;
}

// Update is called once per frame
void Update () {
    print (myState);
        if      (myState == States.cell){           state_cell();} 
        else if (myState == States.sheets_0){       state_sheets_0();} 
        else if (myState == States.mirror){         state_mirror();} 
        else if (myState == States.lock_0){         state_lock_0();} 
        else if (myState == States.sheets_1){       state_sheets_1();}
        else if (myState == States.cell_mirror){    state_cell_mirror();}
        else if (myState == States.lock_1){         state_lock_1();}
        else if (myState == States.freedom){        state_freedom();}
}
c# unity-game-engine enums
3个回答
1
投票

枚举基本上是一种特殊类型,可让您定义命名值。您正在创建命名类型,就像定义类一样。您的代码实际上所做的是首先使用所有可能的命名值定义名为 States 的枚举类型,然后使用您在之前的行中定义的枚举类型“States”声明变量“myState”。您在代码中看不到的是,默认情况下,在 c# 中,枚举的基础类型是整数,并且每个可能的值也分配有一个整数值,如果需要,可以覆盖该值,所以您所有的在更新代码中真正做的是整数比较。你有什么理由不使用 switch 而不是那个大的 if/else 块吗?您也可以消除启动函数并像这样实例化您的 myState 变量:

private States myState = States.cell;

MSDN 这里有很好的文档:

https://msdn.microsoft.com/en-us/library/sbbt4032.aspx


0
投票

默认枚举是 int 值,但也可以转换为其他类型

public enum MyEnum : byte
{
    One = 1,
    Two = 2
}

如果您打算使用关联值作为基础类型,则需要对其进行强制转换

var myByte = (byte)MyEnum.Two;

根据您的示例,您应该使用 switch 语句而不是多个 if 语句,这样更具可读性:

var enumValue = MyEnum.One;
switch (enumValue)
{
    case MyEnum.One:
        //Do Something here.
        break;
    case MyEnum.Two:
        //Do something else here.
        break;
    default:
        throw new ArgumentOutOfRangeException();
}

0
投票

非常简单:
此行的目的:

private enum States {cell, sheets_0, mirror, lock_0, sheets_1, cell_mirror, lock_1, freedom};

是定义一个名为“States”的枚举

其后一行的目的:

private States myState;

是创建一个“State”类型的实例,名为“my state”

© www.soinside.com 2019 - 2024. All rights reserved.