Честно говоря, хотя вы выбрали ответ, эта обратная связь может быть полезна для будущих решений. Однажды сработавшая ваша кнопка должна вызвать событие, внутри которого вы могли бы убедиться, что вы правильно санируете ввод пользователя. Предположим, что пользователь вызовет ошибку, потому что количество переменных, которые они могут ввести, бесконечно.
protected void btnAddScore_Click(object sender, EventArgs e)
{
if(float.TryParse(txtGrade.Text, out grade) && grade >= 0)
txtScores.Text += $"{grade}, ";
}
Это простое условное выражение санирует, гарантируя, что пользователь ввел правильное число и оценка выше нуля. Тем более что отрицательное число маловероятно. Основной момент, ваш код должен отражать использование. Ваш код должен учитывать те аномалии и отклонения, которые могут возникнуть.
Еще одно изящное понятие, вы выводите напрямую на основе ввода. Когда вы сохраните эту информацию, вам нужно будет проанализировать данные. Итак, осознайте, что вам может понадобиться что-то вроде этого:
var scores = txtScores.Text.Split(','); // An array.
txtScores.Text = String.Join(",", scores); // Converts array into single string
С течением времени проблема усложняется, так что имейте это в виду. Надеюсь, это было полезно. Что касается вашей математики, если вы сделаете следующее, она будет рассчитывать:
var sum = txtScores.Text.Split(", ").Sum(grade => (float)grade);
Вышесказанное делает потенциально ошибочное предположение, что все бросят на поплавок без проблем. Это те вещи, о которых вам нужно подумать. Если вы не выполните приведение, ваша сумма будет отражена по длине строки, а не по значениям.