Какую проблему вы видите? Проблема «захвата» влияет только на асинхронный / отложенный / многопоточный код - это не должно влиять на этот случай.
Интересно, наиболее вероятная проблема заключается в том, что все ваши Question
объекты имеют один и тот же экземпляр answerobject
или даже что у вас один и тот же экземпляр Question
много раз.
иллюстрация «проблемы захвата» (см. Комментарии): эта проблема наблюдается при использовании лямбда / анон-метода; если переменная итерации (question
выше) используется в лямбда / анон-методе, она «захватывается» - но слегка нелогичным образом ...
Например; мы можем ожидать, что это напечатает (в непредсказуемом порядке) числа 0-9:
int[] vals = {0,1,2,3,4,5,6,7,8,9};
foreach(int i in vals) {
ThreadPool.QueueUserItem(delegate {
Console.WriteLine(i);
});
}
Console.ReadLine();
Но это не так ... мы исправляем это, добавляя дополнительную переменную:
int[] vals = {0,1,2,3,4,5,6,7,8,9};
foreach(int i in vals) {
int tmp = i;
ThreadPool.QueueUserItem(delegate {
Console.WriteLine(tmp);
});
}
Console.ReadLine();
Это потому, что поведение захваченных переменных определяется их лексической областью действия ... область действия переменной итерации немного больше, чем хотелось бы.