Проблемы со списком и массивом

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

Проблема в том, что он не позволит мне отправить массив другому методу и снова вернуть список в первый метод. Какие-нибудь идеи, что не так? Или как его решить?

  • 0
    return в нижнем регистре, и MoleculeweightCalculator требуется тип возвращаемого значения в сигнатуре метода, в этом случае: List<double>
  • 0
    Кроме того, вы можете захотеть переместить оператор возврата за пределы цикла foreach.
Показать ещё 1 комментарий
Теги:
arrays
return

2 ответа

2
Лучший ответ

В коде есть много ошибок, 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;
}
1

Фактически вы не используете возвращаемое значение. Переменная MoleculeWeightList является локальной для этой функции и, более конкретно, для этой области и не может использоваться вне ее. Но поскольку вы его return, вы можете сделать это:

List<double> weightList = MoleculeweightCalculator(substrings);

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

Это присваивает возвращаемое значение локальной переменной в вызывающем методе, который затем можно использовать позже в методе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню