2016-08-01 123 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): 
     ... 

    }