Я получаю сообщение об ошибке для dateClose.closing: «используется неназначенная локальная переменная». Я объявил dateClose вне цикла for и определил значение внутри цикла for. Как я могу сделать это значение доступным вне цикла for?
public class SMA
{
public Models.DateClose SMAMethod (Queue<Models.DateClose> queue, int period)
{
decimal average, sum=0;
Models.DateClose dateClose;
for (int i = 0; i < period; i++)
{
dateClose = queue.Dequeue();
sum += dateClose.Close;
}
average = sum/period;
dateClose.Close = average; <--- error
return dateClose;
}
}





вы можете просто исправить ошибку, выполнив
Models.DateClose dateClose = null;
однако вы также можете добавить нулевую проверку, чтобы убедиться, что вы не столкнетесь с исключением нулевой ссылки, если в очереди нет элемента.
Стив, эта строка в цикле for "dateClose = queue.Dequeue ();" присваивает значение dateClose.close. Почему это неизвестно вне цикла for?
@ Jam66125, потому что линия не гарантирует запуск (например, период = 0)
Ты можешь это сделать. Если ваша переменная period больше, чем счетчик очереди, то dateClose.Close вызовет исключение.
public Models.DateClose SMAMethod (Queue<Models.DateClose> queue, int period)
{
decimal average, sum=0;
Models.DateClose dateClose = null;
for (int i = 0; i < period; i++)
{
dateClose = queue.Dequeue();
if (dateClose != null)
sum += dateClose.Close;
}
average = sum/period;
dateClose.Close = average;
return dateClose;
}
Почему вы получаете эту ошибку:
если у вас есть класс, переменные-члены инициализировать не нужно:
public class Test
{
private int temp; // this is okay.
..
}
Однако, если у вас есть локальные переменные, вам необходимо их инициализировать:
public void Method()
{
int variabl;
sum += variable; // error.
}
Итак, локальные переменные должны быть инициализированы, а переменные-члены - нет.
Причина ошибки заключается в том, что переменная не была назначена (т.е. ей не присвоено значение, такое как «null» или «1»). Ответ Стива ниже исправит эту ошибку.