Я работаю над программой, которая может рассчитать молекулярный вес по химической формуле. Пока это работает очень хорошо, пока эта ошибка не возникла. Я хочу создать массив, который разделяет химическую формулу (он отлично работает). Отсюда я хочу сделать вызов метода, который отправляет массив другому методу. Где он используется для расчета молекулярного веса от элементов в химической формуле и добавления его в новый список. Затем верните список в первый метод. Вот код (только отображение для одного элемента или кода становится слишком большим);
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
должен быть строчным, и вы должны поместить его из цикла, тогда тип возврата отсутствует. Кроме того, вы не сохраняете возвращенные данные.
Это должно, по крайней мере, скомпилировать:
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;
}
Фактически вы не используете возвращаемое значение. Переменная MoleculeWeightList
является локальной для этой функции и, более конкретно, для этой области и не может использоваться вне ее. Но поскольку вы его return
, вы можете сделать это:
List<double> weightList = MoleculeweightCalculator(substrings);
Textbox2.Text = Convert.ToString(weightList.Sum());
Это присваивает возвращаемое значение локальной переменной в вызывающем методе, который затем можно использовать позже в методе.
return
в нижнем регистре, иMoleculeweightCalculator
требуется тип возвращаемого значения в сигнатуре метода, в этом случае:List<double>