2014-10-31 20 views
-3

錯誤地使用未分配的參數'q'和'g',請糾正我做錯的地方。提前致謝。使用未分配的參數'q'

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     int p = 23; 
     int f = 24; 
     Fun(out p, out f); 
     Console.WriteLine("{0} {1}", p, f); 

    } 
    static void Fun(out int q, out int g) 
    { 
     q = q+1; 
     g = g+1; 
    } 
} 
+4

聽起來像是你需要去閱讀'out'的文檔。你似乎不明白它的作用。 – Servy 2014-10-31 18:09:45

回答

7

你在做什麼錯的是什麼編譯器你做錯了 - 你想out參數讀取之前它肯定分配。看看你的代碼:

static void Fun(out int q, out int g) 
{ 
    q = q+1; 
    g = g+1; 
} 

在每種情況下,賦值表達式的右邊使用out參數,而輸出參數還沒有被賦予了價值呢。 out參數最初沒有明確指定,而且必須在方法返回(不是通過異常之外)

之前被明確賦值如果這個想法是遞增既parameers,你應該使用ref代替。

static void Fun(ref int q, ref int g) 
{ 
    q = q+1; 
    g = g+1; 
} 

或者更簡單地說:

static void Fun(ref int q, ref int g) 
{ 
    q++; 
    g++; 
} 

你需要調用的代碼更改爲:

Fun(ref p, ref f); 
+0

這意味着我不能用out參數來做到這一點? – Maddy 2014-10-31 18:16:26

+0

@Maddy:你不能做任何需要參數值的方法之前,它沒有分配。請記住,你可以寫'int p,f;有趣(out p,out f);' - 你會期望在這種情況下的價值是什麼? – 2014-10-31 18:17:56

+0

同樣的答案,因爲我從你的方法得到,但我試圖得到它與幫助OP OUT參數... – Maddy 2014-10-31 18:24:06