Вероятно, это является причиной вашей проблемы (я попросил разъяснений в комментариях, где вы не ответили).
Все еще выкладываю это как ответ, так как это потенциальная ошибка, и вынеобходимо исправить это.
Как вы упоминали, вы сталкиваетесь с этим исключением на i=0
.высока вероятность того, что это каждый раз, а не какой-либо конкретный случай.
Если Data.Questions.Sum.questions
пусто, то Data.Questions.Sum.questions[i] = fullQuestion;
обязательно вызовет такое исключение.То же самое относится и к Data.Questions.Sum.answers
.
В этом случае вы должны использовать .Add()
для вставки в список.
, поэтому ваш код должен быть,
if (Data.Questions.Sum.questions.Count > i)
Data.Questions.Sum.questions[i] = fullQuestion;
else
Data.Questions.Sum.questions.Add(fullQuestion);
Но если они не пусты, это не должно быть причиной этого исключения.
Еще одна вещь, которую я заметил в вашем коде: Data.Questions.Sum.wordedQuestions
.
Даже если у вас естьдействительный список (здесь Data.Questions.Sum.wordedQuestions
) - поскольку у вас есть Length
prop, это должен быть массив, а не список.
Если он пуст, при этом
string fullQuestion = Data.Questions.Sum.wordedQuestions[rnd.Next(0, Data.Questions.Sum.wordedQuestions.Length)];
эта строка обязательно выдаст
Необработанное исключение типа 'System.ArgumentOutOfRangeException' произошло в mscorlib.dll
, так как вы пытаетесь получить из него данные 0-го индекса.
Итак, прежде чем извлекать данные из списка или массива, сначала вам нужно проверить, есть ли у них данные init,а также у него есть тот индекс, который вы спрашиваете.
что-то вроде
string fullQuestion = string.Empty;
if (Data.Questions.Sum.wordedQuestions != null &&
Data.Questions.Sum.wordedQuestions.Length > 0)
{
//here the way you are creating random number,
// you are assured about index is present in array.
int indexForWordedQuestion = rnd.Next(0, Data.Questions.Sum.wordedQuestions.Length);
fullQuestion = Data.Questions.Sum.wordedQuestions[indexForWordedQuestion];
}