【问题标题】:C# How to Make Enum as a switch?C#如何使枚举作为开关?
【发布时间】:2016-09-28 15:52:21
【问题描述】:

如何在 switch case 中使用枚举值? 这是我的代码:

    //public Variables        
    double rat;
    string M;
    public enum operations {add = 1, sub = 2, mult = 3, div = 4} ;
    bool NewText = false;

    private void btnmult_Click(object sender, EventArgs e)
    {
        //Button "*"  
        operations value = operations.mult;
        rat = Convert.ToDouble(result.Text);
        label1.Text = rat + " *";
        result.Text = "";
    }
      private void EqualButton_Click(object sender, EventArgs e)
    {
        switch (operations) // this is the point which is am confused at
        {            
            case (operations.mult): //multiplyication
                TheEqualMult(rat);
                label1.Text = "";
                break;
        }
    }

现在我应该在 () 之间切换单词之后写什么?我要输入的是枚举值,它指的是 1 或 2 或 3 或 4,以便按钮可以知道哪个是正确的操作。

【问题讨论】:

  • switch (value),如果value 包含您感兴趣的值。顺便说一句,请考虑关注.NET naming conventions。诸如类、枚举、方法之类的东西在 .NET 中是 PascalCased。
  • 我遇到了案例 (operations.mult) "Windows_Calculator.Form1.operations' 到 'int'。存在显式转换(您是否缺少演员表?)"
  • 附注:根据经验,枚举应命名为单数(即operation),除非它们可以组合。

标签: c# enums switch-statement calculator


【解决方案1】:

您当前的示例方法的值硬编码为“Mult”,但我认为在您的实际实现中会更改。

假设“value”包含与单击的按钮对应的枚举值,您的 Switch 语句应该打开该变量:

switch(value)

【讨论】:

  • 在某些情况下我应该做些什么来赋予 operations.mult 的价值?
  • 这将来自按钮本身 - 可能在您的事件参数中。
【解决方案2】:

以下是您要查找的内容。

请注意,在声明枚举时,值将自动递增分配。默认情况下,第一个值为零,除非您覆盖它。

在您的 switch 语句中,您使用要打开其值的变量 - 在您的案例值中。

double rat;
string M;
public enum operations 
{
    add = 1,
    sub,
    mult,
    div
} ;
bool NewText = false;
operations value;

private void btnmult_Click(object sender, EventArgs e)
{
    //Button "*"  
    value = operations.mult;
    rat = Convert.ToDouble(result.Text);
    label1.Text = rat + " *";
    result.Text = "";
    }

private void EqualButton_Click(object sender, EventArgs e)
{

    switch (value) // use a variable at this point
    {            
        case operations.mult: //multiplication
            TheEqualMult(rat);
            label1.Text = "";
            break;
        case operations.add: //addition
            ....
            break;
        case operations.sub: //subtraction
            ....
            break;
        case operations.div: //division
            ....
            break;
        default: //invalid operation
            ....
            break;
    }
}

请注意,在上面的代码中,值将默认为零——实际上是一个无效的枚举——所以你需要在最后使用默认值。

【讨论】:

  • 我仍然收到错误“Windows_Calculator.Form1.operations' to 'int'。存在显式转换(您是否缺少演员表?)”
  • 你在哪里得到那个错误 - 我已经尝试了代码并且没有得到那个错误。
  • 不,我只展示了乘法的例子,我还有 3 个操作
  • 至于您的错误-您是在某个时候将枚举分配给 int 还是反之亦然-这会产生该错误。
  • 我在代码开头公开了 int ,它被称为 value 我应该删除它吗?
【解决方案3】:

在括号之间,您不使用“操作”(它是一种类型),而是使用变量(您在 5 行之前将其命名为“值”)。 同样在某些情况下(麻烦行之后的两行)您不需要使用括号(除了与您合作的其他人之外,它们不会造成伤害)

【讨论】:

  • 我收到此错误“Windows_Calculator.Form1.operations' to 'int'。存在显式转换(您是否缺少演员表?)”
  • 你能提供一些代码吗?请注意,Enum 的核心是 int,因此从 Enum 到 int 的转换可以隐式完成,但要从 int 到 Enum,您需要显式转换。例如'int i = myEnum.OptionOne' 和相反的 'myEnum x = (myEnum)1' - 从错误中我猜第二个正在发生。
猜你喜欢
  • 2013-02-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多