【问题标题】:C# String pass by referenceC#字符串通过引用传递
【发布时间】:2017-07-25 17:31:42
【问题描述】:

我正在开发我的第一个 Windows 窗体应用程序,我需要将字符串从一个函数传递到另一个函数。此时我的代码相当长,所以我做了一个重现相同错误的小例子。

我要做的就是从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
}

【问题讨论】:

  • 没有调用“创建”函数的代码 - 不太清楚您要做什么。你可能想用 C++ 来展示你的目标。

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


【解决方案1】:

试试这样:

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

您试图调用函数 Gets() ,但它需要一个参数。如果你调用函数Create(),它会创建字符串并用创建的字符串调用Gets(),所以现在它可以显示在MessageBox中。

【讨论】:

  • 我知道我可以不用中间人说话,只需调用 Create 方法。我简化了这篇文章的示例。我正在尝试学习如何将字符串从一种方法传递给另一种方法,然后在需要时调用第二种方法。感谢您的意见。
【解决方案2】:

您所说的错误与通过引用传递字符串无关 - 作为 C++ 开发人员,您应该能够理解错误。

您有一个名为Gets 的方法,它接受一个字符串参数。然后你在没有字符串的情况下调用它,所以编译器正确地抱怨没有参数的方法没有重载。

您的解决方案是将字符串(或 null)传递给现有方法,或者创建不带参数的重载。请注意,如果您传递一个 null,那么您的 MessageBox 调用将失败,因此您可能需要替换一个默认值。

【讨论】:

    【解决方案3】:

    您的错误是它找不到名为 Gets 的方法,该方法采用 0 个参数。

    这是您方法的签名:

    private void Gets(string b)
    

    这意味着调用它,你需要传递一个string 类型的参数给它。因此,在调用它时需要这样做:

    Gets("hello or whatever you want");
    

    尽管有时,您几乎从不需要通过ref 传递参数。在极少数情况下您可能需要这样做,因此请参阅this 答案以获取详细信息。

    【讨论】:

      【解决方案4】:

      在我看来,您正试图在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();
      }
      

      【讨论】:

      • 在回答之前,您需要 OP 更加清楚。
      • @SirajMansour - 你为什么这么认为?
      【解决方案5】:

      我找到了我想做的事情的解决方案。

      感谢大家的意见。

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

      【讨论】:

        猜你喜欢
        • 2014-08-11
        • 2016-07-05
        • 2018-09-01
        • 2010-12-24
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 2016-04-09
        • 2015-04-08
        相关资源
        最近更新 更多