【问题标题】:Problems with a list and array列表和数组的问题
【发布时间】:2015-03-14 07:22:02
【问题描述】:

我一直在研究一个可以根据化学式计算分子量的程序。 到目前为止,它运行良好,直到发生此错误。我想制作一个拆分化学式的数组(它工作正常)。从这里我想进行一个方法调用,将数组发送到另一个方法。它用于从化学式中的元素计算分子量,并将其添加到新列表中。然后将列表返回到第一个方法。这是代码(仅显示 1 个元素或代码太大);

private void Textbox1_TextChanged(object sender, EventArgs e)
{
    string input = Textbox1.Text;
    string pattern = @"([A-Z][a-z]?\d*|[A-Z]?\d*)";
    string[] substrings = Regex.Split(input, pattern);

    MoleculeweightCalculator(substrings);

    Textbox2.Text = Convert.ToString(MoleculeWeightList.Sum());
}

private static MoleculeweightCalculator(string[] substrings)
{
    List<double> MoleculeWeightList = new List<double>();

    foreach (string match in substrings)
    {
        if (match == "H")
        {
            MoleculeWeightList.Add(1.008);
        }
    }
return MoleculeWeightList;
}

问题是它不允许我将数组发送到另一个方法并将列表再次返回到第一个方法。有什么想法有什么问题吗?或者如何解决?

【问题讨论】:

  • return 为小写,MoleculeweightCalculator 需要在方法签名中返回类型,本例中为:List&lt;double&gt;
  • 另外,您可能希望将 return 语句移到 foreach 循环之外。
  • 哦,是的,return 在 foreach 之外。只是在这里写错了:)

标签: c# arrays return method-call


【解决方案1】:

你的代码有很多错误,return 必须是小写的,你应该把它放在循环之外,那么返回类型就丢失了。此外,您没有存储返回的数据。

这至少应该编译:

private void Textbox1_TextChanged(object sender, EventArgs e){
    string input = Textbox1.Text;
    string pattern = @"([A-Z][a-z]?\d*|[A-Z]?\d*)";
    string[] substrings = Regex.Split(input, pattern);

    var result = MoleculeweightCalculator(substrings);

    Textbox2.Text = Convert.ToString(result.Sum());
}

private static List<double> MoleculeweightCalculator(string[] substrings){
    List<double> MoleculeWeightList = new List<double>();

    foreach (string match in substrings){
        if (match == "H")
            MoleculeWeightList.Add(1.008);
    }

    return MoleculeWeightList;
}

【讨论】:

    【解决方案2】:

    您实际上并没有使用返回值。 MoleculeWeightList 变量是该函数的本地变量,更具体地说,是该作用域的局部变量,不能在其外部使用。但是因为你return它,你可以这样做:

    List<double> weightList = MoleculeweightCalculator(substrings);
    
    Textbox2.Text = Convert.ToString(weightList.Sum());
    

    这会将返回值分配给调用方法中的局部变量,然后您可以稍后在该方法中使用它。

    【讨论】:

      猜你喜欢
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      • 2018-05-10
      • 2010-10-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多