我正在处理我的第一个Windows Form App,我需要将一个字符串从一个函数传递到另一个函数。我的代码在这一点上相当长,所以我做了一个小例子,它重现了同样的错误。
我要做的就是从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 :(得分:3)
试试这样:
private void button1_Click(object sender, EventArgs e)
{
Create();
}
您试图调用函数Gets()
,但它需要一个参数。如果您调用函数Create()
,它将创建字符串并使用创建的字符串调用Gets()
,因此现在它可以显示在MessageBox
中。
答案 1 :(得分:1)
您声明的错误与通过引用传递字符串无关 - 作为C ++开发人员,您应该能够理解错误。
您有一个名为Gets
的方法,它接受一个字符串参数。然后你不用字符串调用它,所以编译器正确地抱怨没有参数的方法没有重载。
您的解决方案是将字符串(或null)传递给现有方法,或者创建不带参数的重载。请注意,如果传递null,则MessageBox调用将失败,因此您可能希望替换默认值。
答案 2 :(得分:1)
您的错误是声明找不到名为Gets的方法,该方法接受0个参数。
这是您方法的签名:
private void Gets(string b)
这意味着要调用它,您需要将一个string
类型的参数传递给它。因此,您在调用它时需要执行此操作:
Gets("hello or whatever you want");
你几乎从来没有,虽然有时需要通过ref
传递论据。在极少数情况下您可能需要,因此请参阅this答案以获取详细信息。
答案 3 :(得分: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();
}
答案 4 :(得分:-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();
}