Max() ругается что коллекция была изменена - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день! Выскакивает исключение ValueTradeList.Max(); Коллекция была изменена.
public class Strategy
{
    List<double> PriceTradeList { get; set; }
    List<int> ValueTradeList { get; set; }
    //конструктор
    public Strategy(List<double> price, List<int> value)
    {
        PriceTradeList = price;
        ValueTradeList = value;
        Maxvalue = ValueTradeList.Max();
    }
    private int Str()
    {
           //......
           return rezult;
    }
}
Класс вызываю таким способом в методе другого класса:
int s = new Strategy(PriceTradeList, ValueTradeList).Str()
И бывает что выскакивает исключение на строке Maxvalue = ValueTradeList.Max(); Коллекция была изменена. Вызовов проходит много, бывает за секунду раз по 50. И я так понимаю что исключение вылазит от того, что класс не успевает отработать до конца и отдать результат, а он уже вызывается с обновленными данными. Как можно решить проблему что бы не было исключения? пробовал вот так:
public Strategy(List<double> price, List<int> value)
{
    lock (this)
    {
        PriceTradeList = price;
        ValueTradeList = value;
    }
    Maxvalue = ValueTradeList.Max();
}
Но не помогает. Подскажите как можно решить проблему?

Решение задачи: «Max() ругается что коллекция была изменена»

textual
Листинг программы
[System.Runtime.Remoting.Contexts.Synchronization]
public class ThreadSafeList<T>:List<T>
{
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.636 из 5
Похожие ответы