2016-08-01 72 views
0

我需要将这些If语句转换为Switch-case语句。我遇到语法错误。我尝试使用smth。如:如何将这些if语句转换为switch-case C#

switch(field.text){ 
case field.text.contains("+"): 
field.text=a+b; 
break; 
} 

但“field.text.contains(”+“)”有语法错误。

我需要帮助。 这是我的代码:

这是计算器应用程序,做简单的2个操作符数学。

这是拆分字符串2以便找到2个输入的数字的方法:

public void GetNumbers(ref string first, ref string second, int place, out int firstNumber, out int secondNumber) 
{ 
    if (place > 0) 
    { 
     first = ResultFiled.Text.Substring(0, place); 

     second = ResultFiled.Text.Substring(place + 1); 
    } 

    Int32.TryParse(first, out firstNumber); 
    Int32.TryParse(second, out secondNumber); 
} 

private void Calculate_Click(object sender, EventArgs e) 
{ 

    string first = null; 
    string second = null; 
    int result = 0; 
    int place = 0; 
    int firstNumber = 0; 
    int secondNumber = 0; 

识别操作者在计算器的形式输入的数字,然后找到它在哪里。将字符串拆分为2,找到第一个和最后一个数字。然后做数学运算。

添加2号

if (ResultFiled.Text.Contains("+")) 
    { 
     place = ResultFiled.Text.IndexOf("+"); 

     GetNumbers(ref first, ref second, place, out firstNumber, out secondNumber); 

     result = firstNumber + secondNumber; 

     ResultFiled.Text = result.ToString(); 
    } 

    else 
    { 

减去2号

 if (ResultFiled.Text.Contains("-"))  
     { 
      place = ResultFiled.Text.IndexOf("-"); 
      GetNumbers(ref first, ref second, place, out firstNumber, out secondNumber); 

      result = firstNumber - secondNumber; 

      ResultFiled.Text = Convert.ToString(result); 
     } 

    else 
    { 

乘2号

 if (ResultFiled.Text.Contains("*")) 
     { 
      place = ResultFiled.Text.IndexOf("*"); 
      GetNumbers(ref first, ref second, place, out firstNumber, out secondNumber); 

      result = firstNumber * secondNumber; 

      ResultFiled.Text = Convert.ToString(result); 
     } 

     else 
     { 

除以2号

  if (ResultFiled.Text.Contains("/")) 
      { 
       place = ResultFiled.Text.IndexOf("/"); 
       GetNumbers(ref first, ref second, place, out firstNumber, out secondNumber); 

       try 
       { 
        result = firstNumber/secondNumber; 
       } 
       catch (DivideByZeroException exc) 
       { 
        MessageBox.Show(exc.Message); 
       } 

       ResultFiled.Text = Convert.ToString(result); 
      } 
     } 
     } 
    } 
} 
+5

为什么哟你需要他们成为转换语句? – juharr

+0

你不能。至少不是直接的。 c#switch语句只能使用常量(直到c#7)。 –

+1

任何半面体表达式解析器应该有[词法分析器](https://en.wikipedia.org/wiki/Lexical_analysis)。在语法元素中分割输入字符串并将它们分配给* enum *以对元素进行分类的代码。现在一切都变得简单了,包括编写switch语句。 –

回答

0

如果拆分出来的运算符(+, - 等)也一样,你可以做类似如下的内容:

public enum Operator { 
    Plus, 
    Minus 
} 

Operator operator = Operator.Plus; // As an example. 

switch (operator) { 
    case Operator.Plus: 
     Console.WriteLine("Here's the plus operator"); 
     break; 
    case Operator.Minus: 
     Console.WriteLine("Here's the minus operator"); 
     break; 
    default: 
     Console.WriteLine("This isn't an operator"); 
     break; 

然后更换你想要当操作发生在Console.WriteLine运行的代码发生。这里是一个不错的格式要做到这一点,分裂成功能:

public int PerformOperation(int firstNumber, int secondNumber, string operator) { 
switch (operator) { 
    case Operator.Plus: 
     Console.WriteLine("Here's the plus operator"); 
     return (firstNumber + secondNumber); 
     break; 
    case Operator.Minus: 
     return (firstNumber - secondNumber); 
     break; 
    default: 
     Console.WriteLine("This isn't an operator"); 
     break; 

然后,你可以写逻辑如下:

void SomeMainFunction() { 
    string textBoxInput = txbInput.Text; // Example of fetching calc input 

    int firstNumber = GetFirstNumber(textBoxInput); // Write a function that returns your firstNumber from the input string. 
    int firstNumber = GetSecondNumber(textBoxInput); // Write a function that returns your secondNumber from the input string. 
    string operator = GetOperator(textBoxInput); // Write a function that returns your operator from the input string. 

    txbInput.Text = PerformOperation(firstNumber, secondNumber, operator); 
} 
+0

你可以使用'operator'作为标识符吗?使用关键字作为标识符的正确方法是预先加上一个'@'符号AFAIK。或者只是完全重命名。 – Downvoter

+1

可以在变量名前添加'@',即'string @operator = ...;' – ken2k

+0

当你在它的时候,添加缺少的}太;) – Jonny

3

首先创建枚举MathOp

enum MathOp {Null, Add, Sub, Mult, Div } 

则:

var op = 
    txt.Contains("+")? MathOp.Add: 
    txt.Contains("-")? MathOp.Sub: 
    txt.Contains("*")? MathOp.Mult: 
    txt.Contains("/")? MathOp.Div: 
         MathOp.Null; 

    switch (op) 
    { 
     case (MathOp.Add): 
     ... 

     case (MathOp.Sub): 
     ... 

    }