Массив назначения не достаточно длинный?
У меня есть класс со следующим методом:
public List<Bike> bikesCopy
{
get
{
List<Bike> bs;
lock (_bikes) bs = new List<Bike>(_bikes);
return bs;
}
}
Что делает копию другого списка, private List<Bike> _bikes;
Странная вещь в том, что я получаю следующую ошибку:
Массив назначения не был достаточно длинным. Проверьте destIndex и длину и нижние границы массива.
В чем проблема?
Ответы
Ответ 1
Я бы сказал, что ошибка заключается в том, что объект _bikes не является потокобезопасным. Как отмечалось, где-то есть модификация объекта _bikes, который не блокируется.
Это вторая секундная ошибка, когда переменная bs настроена на размер X, когда измеряется размер _bikes. В следующий раскол секунды, когда он собирается заполнить список, объект _bikes увеличился в размере, давая ошибку.
Итак, переходите к своему коду. Найдите все ссылки на свой _bikes объект и убедитесь, что они поточно защищены (с блокировкой).
Ответ 2
Ну, вы могли бы попробовать:
using System.Linq; //ToList() is an extension function defined here
...
lock(_bikes)
return _bikes.ToList();
Подробности исключения обсуждаются здесь: Почему в некоторых случаях не работает цикл foreach?