2016-09-28 57 views
-2

如何在开关情况下使用枚举值? 这里是我的代码:C#如何使枚举成为一个开关?

//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,因此按钮可以知道哪个是正确的操作。

+5

'switch(value)',如果'value'包含您感兴趣的值。顺便说一句,请考虑以下[.NET命名约定](https://msdn.microsoft.com/en-us/library/ ms229002.aspx)。诸如类,枚举,方法之类的东西都是.NET中的PascalCased。 – Groo

+0

我得到了案例(operations.mult)“Windows_Calculator.Form1.operations”为'int'。显式转换存在(你是否缺少一个转换?)“ –

+1

只是一个侧面说明:作为一个经验法则枚举应该是除非它们可以组合,否则命名为单数(即“操作”)。 – Jamiec

回答

0

以下是你在找什么。

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

在您的switch语句中,您可以使用您正在接通的值的变量 - 在您的case值中。

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; 
    } 
} 

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

+0

我仍然收到一个错误“Windows_Calculator.Form1.operations”为'int'。一个显式的转换存在(你是否缺少一个转换?)“ –

+0

你从哪里得到这个错误 - 我已经尝试了代码并且没有得到那个错误。 – PaulF

+0

无我只显示了乘法情况作为例子我有3个更多的操作 –

0

在您不使用“操作”的括号之间(即一个类型),但是一个变量(你之前命名为“值”5行)。 同样在案例中(两行后面的麻烦行)你不需要使用小括号(除了与你合作的其他人不会使用伤害)

+0

我得到这个错误“Windows_Calculator.Form1.operations”为'int'。一个明确的转换存在(你是否缺少一个转换?)“ –

+0

你能提供一些代码吗?请注意,Enum是其核心的一个int,所以从Enum到int的转换可以隐式完成,但是要从int到Enum,需要明确进行转换。例如'int i = myEnum.OptionOne'和相反的'myEnum x =(myEnum)1' - 从错误我猜会发生第二个。 – Theo

2

你当前的示例方法的值被硬编码为“Mult “但我认为这将在您的实际执行中发生变化。

假设“值”包含对应的按钮点击枚举值,你的switch语句应该对变量进行切换:

switch(value) 
+0

我应该怎么做才能赋予operations.mult的价值? –

+0

这将来自它自己的按钮 - 可能在您的事件参数。 – Theo