C#字符串按引用传递

时间:2017-03-06 00:05:39

标签: c# string function pass-by-reference

我正在处理我的第一个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
}

5 个答案:

答案 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();
}