2015-09-17 25 views
-3

錯誤所涉及的變量是行(32,17)上的一個數字,我該如何解決這個問題?C#錯誤:在控制離開當前方法之前必須將out參數分配給

using System; 
class Calculation 
{ 
    public static void Main(string[] data) 
    { 
     double result = Convert.ToDouble(data[0]); 
     char op; 
     double number; 
     GetData(out op, out number); 
     while (op != 'q' && op != 'Q') 
     { 
      switch (op) 
      { 
       case '+': 
        result += number; 
        break; 
       case '-': 
        result -= number; 
        break; 
       case '*': 
        result *= number; 
        break; 
       case '/': 
        result /= number; 
        break; 
      } 
      Console.WriteLine("Result = " + result.ToString()); 
      GetData(out op, out number); 
     }  
    } 

    static void GetData(out char anOperator, out double aNumber) 
    { 
     string line; 
     Console.Write("Enter an opertor and a number or 'q' to quit: "); 
     line = Console.ReadLine(); 
     anOperator = Convert.ToChar(line.Substring(0, 1)); 
     if (anOperator != 'q' && anOperator != 'Q') 
      aNumber = Convert.ToDouble(line.Substring(2)); 
    } 
} 
+2

'aNumber'不能保證分配。因爲它是一個'out'參數,所以你需要給它賦值。 –

+0

@ IanR.O'Brien如果程序員沒有明確指定一個值,你知道爲什麼沒有爲它的類型賦予默認值嗎?似乎這對我來說是合乎邏輯的行爲。 – sab669

+0

@ sab669 - 這是一個非常好而且不同的問題,在評論中太長而無法正確解釋。你應該發佈它或看看是否已經有答案。 –

回答

1

一下添加到GetData方法:

aNumber = 0; 

像這樣:

static void GetData(out char anOperator, out double aNumber) 
{ 
     string line; 
     Console.Write("Enter an opertor and a number or 'q' to quit: "); 
     line = Console.ReadLine(); 
     anOperator = Convert.ToChar(line.Substring(0, 1)); 
     if (anOperator != 'q' && anOperator != 'Q') 
      aNumber = Convert.ToDouble(line.Substring(2)); 
     else 
      aNumber = 0; 
} 
相關問題