【问题标题】:c# Pass a multi-line string to a function and return an arrayc# 将多行字符串传递给函数并返回一个数组
【发布时间】:2015-08-07 15:56:23
【问题描述】:

我是 C# 编程的新手,我正在尝试使用良好的代码实践。我知道在下面的示例中使用全局变量是不好的编码,但我很难弄清楚这一点。所以,我试图用这个问题完成两件事。

首先,我想弄清楚如何将文本从多行文本框传递给一个函数并让它返回一个数组,然后我可以将它传递给另一个函数进行输出(显示/打印/保存到一份文件)。

第二,使我的代码更易于重用(通过将全局变量移到它们实际使用的函数中)。

我的问题是..如何将字符串传递给函数并返回一个数组,然后可以将其传递给另一个函数?

public partial class Form1 : Form
{

    string[] SignalStrengthInputArray450;
    string[] SignalStrengthOutputVar450 = new string[7];


    // cut out other functions

    private void Submit_450_Click(object sender, EventArgs e)
    {
        // ensure that input textbox is not null then call Load function
        // SignalStrenthInput_450 is the object name of a multi-line textbox
        if (!String.IsNullOrWhiteSpace(SignalStrengthInput_450.Text))
        {
            Load_Signal_Strength_Array();
        }
        else
        {
            // do something different
        }

        // additonal code for other textboxes
    }

    private void Load_Signal_Strength_Array()
    {
        // Processing Signal Strength textbox 
        SignalStrengthInputArray450 = SignalStrengthInput_450.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
        foreach (string a in SignalStrengthInputArray450)
        {
            // loads some stuff into the SignalStrengthOutputArray450 array
        }
    }

}

【问题讨论】:

  • 那么这里的确切障碍是什么?
  • 如果您有问题,请明确说明。否则,我觉得这可能更适合CodeReview
  • 您可以直接从函数返回数组并将返回值传递给其他函数。

标签: c# arrays string textbox return


【解决方案1】:

你需要一个参数和返回类型(字符串数组),你可能需要阅读更多关于Passing Parametersreturn statement的返回值。

private string[] Load_Signal_Strength_Array(string signalStrengthInput_450)
{
   string[] SignalStrengthInputArray450 = SignalStrengthInput_450.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
   foreach (string a in SignalStrengthInputArray450)
   {
      // loads some stuff into the SignalStrengthOutputArray450 array
   }
   return SignalStrengthInputArray450; 
}   

方法调用会是这样的

string[] signalStrengthArray = Load_Signal_Strength_Array(SignalStrengthInput_450.Text);

【讨论】:

  • 所以,使用这个,为了使用返回的数组,我的函数调用将更改为:string [] OutputArray = Load_Signal_Strength_Array();对吗?
  • 感谢方法调用更新。我在您添加之前发表了评论。这我很完美..正是我需要的。谢谢!
【解决方案2】:

你可以从函数返回数组:

public string[] f1(string s)
{
    return s.Split('/');
}

您可以将返回值传递给另一个函数:

public void f2(string[] p)
{
    foreach(var item in p)
       Console.WriteLine(item);
}

像这样使用:

public void main()
{
   f2(f1("some/delimited/string");
}

【讨论】:

    【解决方案3】:

    为什么不

    • 让 Load_Signal_Strength_Array 成为一个函数,该函数将本地字符串作为参数并返回重新处理的输出(此处为数组,但 IList 可能更好)
    • 用一个简单的Load_Signal_Strength_Array(SignalStrengthInput_450.Text)调用这个函数

    例子:

    private string[] Load_Signal_Strength_Array(string text)
    {
        // Processing text
        var inputs = text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
        var outputs = new List<string>();
        foreach (string a in inputs)
        {
            // loads some stuff into the output array
            // example:
            if (!string.IsNullOrEmpty(a)) outputs.add(a);
        }
        return outputs.ToArray();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      • 2015-09-09
      • 2013-10-27
      • 2021-12-12
      • 2013-06-27
      • 1970-01-01
      相关资源
      最近更新 更多