2017-03-06 163 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(); 
    }