использование неназначенной локальной переменной `total`

Я хочу иметь сумму всех интервалов, но я пишу этот код, у меня есть сообщение об ошибке: использование неназначенной локальной переменной total?

enter TimeSpan total;
foreach (var grp in query)
{
  TimeSpan interval = TimeSpan.FromMinutes(grp.Minuut); 
  TimeSpan intervalH = TimeSpan.FromHours(grp.Sum);

  interval = interval + intervalH;
  total += interval;
  string timeInterval = interval.ToString();   
  dataGridView2.Rows.Add(i++, grp.Id, grp.Sum, grp.Minuut,timeInterval);
}

person Nick_BE    schedule 24.10.2011    source источник
comment
Ваше последнее редактирование уничтожило ваше форматирование, и часть enter TimeSpan не имеет смысла. Вы можете вернуть или исправить это?   -  person CodesInChaos    schedule 24.10.2011
comment
объявить и инициализировать «всего» перед добавлением к нему «интервала»   -  person Alex    schedule 24.10.2011


Ответы (4)


Начните с:

TimeSpan total = TimeSpan.Zero;

Увеличение переменной, которая не имеет значения, не имеет смысла. Поэтому вполне естественно, что это ошибка компилятора.

В то время как поля инициализируются значением 0, локальные переменные должны быть назначены до их первого чтения. В вашей программе total += interval; читает total, чтобы увеличить его. Таким образом, на первой итерации вашего цикла ему не было бы присвоено значение.

person CodesInChaos    schedule 24.10.2011

total += interval;

Неправильно, когда итогу вообще не присваивается значение... Что вы собираетесь добавить еще и интервал?

person FailedDev    schedule 24.10.2011
comment
Я просто хочу, чтобы в моем datagridview были все строки, столбец заполнялся временным интервалом. - person Nick_BE; 24.10.2011
comment
@Nick_BE Просто инициализируйте его значением 0. Или любым другим значением C'tor по умолчанию. - person FailedDev; 24.10.2011

Вы должны инициализировать общее значение перед использованием

 TimeSpan total = new TimeSpan();,

тогда код должен работать.

person Kamil Lach    schedule 24.10.2011

Никакое начальное значение никогда не присваивается итогу. Вы должны присвоить значение, прежде чем использовать его.

person dnuttle    schedule 24.10.2011
comment
Всего TimeSpan = новый TimeSpan (0); это то, что мне было нужно - person Nick_BE; 24.10.2011