2013-09-16 20 views
1
private void getDetails(out IPAddress ipAddress, out int port) 
{ 
    IPAddress Ip; 
    int Port; 

    try 
    { 
     Ip = IPAddress.Parse(textboxIp.Text); 
     Port = int.Parse(textboxPort.Text); 
    } 
    catch (Exception ex) 
    { 
     IPAddress Ip null; 
     int Port = -1; 
     MessageBox.Show(ex.Message); 
    } 
} 

爲什麼我得到這個編譯器錯誤? 在兩種情況下,我的參數都分配了值輸出參數必須指定給控制器離開當前方法之前

+2

如果您想使用輸出參數,您必須在您的方法中指定值。否則你可以使用ref參數。 –

+4

'IPAddress Ip null;'是無效的,而不是你在真實代碼中的含義(或者你會得到一個不同的錯誤 - 一個不會導致這個問題的錯誤)。請發佈您的真實代碼。 – hvd

+0

你正在分配給本地變量而不是參數 –

回答

9

您不會爲傳入方法的參數分配任何值 - ipAddressport。相反,聲明新的IpPort變量,只是將值賦給你所傳遞的參數:

private void getDetails(out IPAddress ipAddress, out int port) 
{ 
    try 
    { 
     ipAddress = IPAddress.Parse(textboxIp.Text); 
     port = int.Parse(textboxPort.Text); 
    } 
    catch (Exception ex) 
    { 
     ipAddress = null; 
     port = -1; 
     MessageBox.Show(ex.Message); 
    } 
} 

編輯:對於其他開發者,如果用「走出去」,必須允許該變量的能力在函數的所有點上設置 - 包括「if」語句和「catch」,就像它在返回時一樣,否則它會給出這個人得到的錯誤。

2

您沒有將值分配給兩個out變量。你只是給你在方法內部創建的值賦值。

7

不,您創建了另一個變量 - int Port,與out int port不一樣。您沒有爲實際輸出參數分配一個值。輸出參數ipAddress也一樣。

2

很明顯,您不會在該方法的任何位置爲您的out參數ipAddressport分配任何值。

相關問題