列表和数组的问题

Problems with a list and array

我一直在研究一个可以根据化学式计算分子量的程序。 到目前为止它工作得很好,直到发生此错误。我想制作一个拆分化学式的数组(效果很好)。从这里我想进行一个方法调用,将数组发送到另一个方法。它用于从化学式中的元素计算分子量,并将其添加到新列表中。然后return列表到第一个方法。这是代码(仅显示 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将列表发送到第一个方法。任何想法出了什么问题?或者如何解决?

您实际上并没有使用 return 值。 MoleculeWeightList 变量是局部 到那个函数 ,更具体地说,是那个 scope 并且不能在它之外使用。但是因为你 return 它,你可以这样做:

List<double> weightList = MoleculeweightCalculator(substrings);

Textbox2.Text = Convert.ToString(weightList.Sum());

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

你的代码有很多错误,return 必须是小写的,你应该把它放在循环之外,然后缺少 return 类型。此外,您没有存储 returned 数据。

这至少应该编译:

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