C# 的新手,任何人都可以向我解释枚举和枚举的设置变量是如何工作的吗?
New to C#, can anyone explain to me how enums and setting variables for enums works?
我确定这是一个非常简单的问题,但我正在学习如何用 C# 编程,这个文本冒险程序的 "flow" 对我来说非常有意义,但我很困惑如何第三行 "private States myState;" 有效。
如您所见,程序首先将变量 myState 设置为 States.cell,它调用一个 void 方法(下面未显示),该方法等待更改变量 "myState" 的键,因此更新更新功能。
我的问题是,"enum" class 是如何工作的?似乎可以从 "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();}
}
默认情况下枚举是 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();
}
枚举基本上是一种特殊类型,可让您定义命名值。您正在创建命名类型,就像您定义 class 一样。您的代码实际做的是首先使用所有可能的命名值定义名为 States 的枚举类型,然后使用您在前一行中定义的枚举类型 "States" 声明变量 "myState"。您在代码中看不到的是,默认情况下,在 c# 中,枚举的基础类型是一个整数,并且每个可能的值也分配了一个整数值,如果需要可以覆盖它,所以您在您的更新代码中真正做的是整数比较。你有什么理由不使用开关而不是那个大 if/else 块吗?你也可以去掉 start 函数,像这样实例化你的 myState 变量:
private States myState = States.cell;
MSDN 在这里有很好的文档:
很简单:
此行的目的:
private enum States {cell, sheets_0, mirror, lock_0, sheets_1, cell_mirror, lock_1, freedom};
就是定义一个enum,名字叫"States"
其后一行的目的:
private States myState;
就是创建一个"State"类型的实例,命名为"my state"
我确定这是一个非常简单的问题,但我正在学习如何用 C# 编程,这个文本冒险程序的 "flow" 对我来说非常有意义,但我很困惑如何第三行 "private States myState;" 有效。
如您所见,程序首先将变量 myState 设置为 States.cell,它调用一个 void 方法(下面未显示),该方法等待更改变量 "myState" 的键,因此更新更新功能。
我的问题是,"enum" class 是如何工作的?似乎可以从 "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();}
}
默认情况下枚举是 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();
}
枚举基本上是一种特殊类型,可让您定义命名值。您正在创建命名类型,就像您定义 class 一样。您的代码实际做的是首先使用所有可能的命名值定义名为 States 的枚举类型,然后使用您在前一行中定义的枚举类型 "States" 声明变量 "myState"。您在代码中看不到的是,默认情况下,在 c# 中,枚举的基础类型是一个整数,并且每个可能的值也分配了一个整数值,如果需要可以覆盖它,所以您在您的更新代码中真正做的是整数比较。你有什么理由不使用开关而不是那个大 if/else 块吗?你也可以去掉 start 函数,像这样实例化你的 myState 变量:
private States myState = States.cell;
MSDN 在这里有很好的文档:
很简单:
此行的目的:
private enum States {cell, sheets_0, mirror, lock_0, sheets_1, cell_mirror, lock_1, freedom};
就是定义一个enum,名字叫"States"
其后一行的目的:
private States myState;
就是创建一个"State"类型的实例,命名为"my state"