2016-09-24 7 views
0

Я хочу сделать код, который будет при первом нажатии на кнопку запуска rotorSpeed секундомер, а затем на второй нажмите добавить rotorSpeed.ElapsedMilliseconds в list. Во втором клике сбрасывается секундомер и снова начинается отсчет времени, затем третий клик добавляет rotorSpeed.ElapsedMilliseconds в list. Там нет ошибки в коде, но когда я его отладки я получаю ошибку на double average = list.Average();Среднее значение списка в C#

Stopwatch rotorSpeed = new Stopwatch(); List<double> list = new List<double>();

private void button1_Click(object sender, EventArgs e) 
    { 
     i++; 
     //Getting rotor speed 
     if (i != 2) 
     {    
      if (rotorSpeed.IsRunning) 
      { 
       rotorSpeed.Stop(); 
       list.Add(rotorSpeed.ElapsedMilliseconds); 
       rotorSpeed.Start();     
      } 
      else 
      { 
       rotorSpeed.Reset(); 
       rotorSpeed.Start(); 
      } 
     } 

     double average = list.Average(); 
     textBox2.Text = average.ToString(); 

Это ошибка, я получаю:

необработанное исключение типа «System. InvalidOperationException "произошел в> System.Core.dll

Дополнительная информация: Последовательность не содержит элементов

+0

Какая у вас ошибка? – pavnik

+4

Это, вероятно, потому, что вы пытаетесь получить «средний» список без элементов после первого щелчка. Какое исключение вы получаете? – MarcinJuraszek

+1

@pavnik Необработанное исключение типа «System.InvalidOperationException» произошло в System.Core.dll Дополнительная информация: Последовательность содержит элементы не – rltcounter221

ответ

2
if (list.Count > 0) 
{ 
    textBox2.Text = list.Average().ToString(); 
} 
+0

Количество должно быть больше или равно до 1. –

+0

Почему? Не имеет смысла составлять в среднем 1 элемент. LE: Если это не требуется, чтобы его отображали в текстовом поле. В этом случае, я думаю, вы были бы правы :) – TigOldBitties

+0

Текстовое поле не будет заполнено, если ваш список равен 1. –

2

Ваш list пуст и поэтому вызов Average() на него бросали исключение. Измените строку ниже

double average = list.Average(); 

в

double average = list.Count > 0 ? list.Average() : 0.0; 
+1

Почему '0.0'? По вашему мнению, можно без колебаний использовать ноль? Другой вариант: 'list.Count> 0? list.Average(): double.NaN'. Среднее значение пустой последовательности можно назвать «0.0/0.0», в некотором смысле. –

0
if (list.Count > 1) 
     { 
      double average = list.Average(); 
      textBox2.Text = average.ToString(); 
      rotorSpeed.Stop(); 
     } 

Это работает просто отлично. Благодаря!

Смежные вопросы