2017-03-06 215 views
-3

我正在使用我的第一個Windows窗體應用程序,並且需要將字符串從一個函數傳遞到另一個函數。我的代碼在這一點上相當長,所以我做了一個小例子,它重現了同樣的錯誤。C#字符串通過引用傳遞

我所要做的就是從Create()中取出創建的字符串並將其傳遞到Gets()。我用C++做了這個,但我似乎無法用C#來解決這個問題。

private void Create() 
{ 
    string a; 
    a = "This is a test"; 
    Gets(a); 
} 

private void Gets(string b) 
{ 
    MessageBox.Show(b); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    Gets(); //error CS1501: No overload for method 'Gets' takes 0 arguments 
} 
+0

沒有調用「創建」功能的代碼 - 不是很清楚你想要做什麼。你可能想用C++來展示你的目標。 –

回答

3

嘗試這樣的:

private void button1_Click(object sender, EventArgs e) 
{ 
     Create(); 
} 

你試圖調用函數Gets(),但它需要一個參數。如果您調用函數Create(),它將創建該字符串並用創建的字符串調用Gets(),所以現在它可以顯示在MessageBox中。

+0

我知道我可以削減中間人的分類來說話,只是調用Create方法。我簡化了這篇文章的例子。我正試圖學習如何將字符串從1方法傳遞到另一個方法,然後在需要時調用第二種方法。謝謝您的意見。 – daaaavidv

1

您聲明的錯誤與通過引用傳遞字符串無關 - 作爲C++開發人員,您應該能夠理解錯誤。

你有一個方法叫做Gets,它接受一個字符串參數。然後,您不用字符串就可以調用它,因此編譯器正確地抱怨沒有參數的方法沒有重載。

您的解決方案是將字符串(或null)傳遞給現有方法,或者創建一個不帶參數的重載。請注意,如果您傳遞null值,那麼MessageBox調用將失敗,因此您可能需要替換默認值。

1

你的錯誤是說它無法找到一個名爲獲取,它需要0參數的方法。

這是你的方法的簽名:

private void Gets(string b) 

這意味着調用它,你需要string類型的一個參數傳遞給它。因此,你需要做的這個時候,你在呼喚它:

Gets("hello or whatever you want"); 

你幾乎從來沒有,不過有次,需要通過ref傳遞的參數。在極少數情況下,您可能需要,因此請參閱this答案以瞭解詳細信息。

-3

在我看來,你正試圖在Create方法中創建一個你想在Gets方法中使用的狀態,但是Gets是通過點擊按鈕觸發的。答案是,如果是這樣的話,就是使用一個類級別的變量來保存狀態。

試試這個:

private void Create() 
{ 
    b = "This is a test"; 
} 

private string b = null; 
private void Gets() 
{ 
    MessageBox.Show(b); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    Gets(); 
} 
+0

在回答之前,您需要從OP中獲得更多的清晰度。 –

+0

@SirajMansour - 你爲什麼這麼認爲? – Enigmativity

1

我發現了什麼,我希望做一個解決方案。

謝謝大家的意見。

 public string Create() 
    { 
     string a; 

     a = "This is a test"; 

     return a; 

    } 


    private void Gets() 
    { 

     string Value = Create(); 
     MessageBox.Show(Value); 

    } 



    private void button1_Click(object sender, EventArgs e) 
    { 

     Gets(); 
    }