Эйч
Эйч
  • Все менторы
Задачи/C#-разработчик/Найти ошибку в коде

Найти ошибку в коде

Условие задачи

Дан класс FlatteningService. У него имеются свойства, среди которых ProductDictionary<string, IList<T>> и CustomerDictionary<string, IList<T>>, а также метод MakeFlatten, внутри которого происходит обращение к этим свойствам на чтение/изменение. В процессе работы программы во время вызова этого метода могут возникать ошибки KeyNotFoundException и подобные. Дополнительные вводные: в процессе работы создаётся один экземпляр класса FlatteningService, но вызов метода MakeFlatten осуществляется параллельно в 10 потоках. Найти ошибку в коде

csharppublic class FlatteningService
{
    private readonly Dictionary<string, IList<FlattenLocationFilter>> locationFilters;

    public PromoFlatteningService()
    {
        locationFilters = new Dictionary<string, IList<FlattenLocationFilter>>();
    }

    public IEnumerable<FlattenPromo> MakeFlatten(IEnumerable<OraclePromo> items)
    {
        var itemsList = items.ToLookup(x => x.PromoCode);

        var flatList = new List<FlattenPromo>();

        foreach (var src in itemsList.Single())
        {
            var promoCode = $"{src.PromoCode}";

            const string locationFilter = "Auchan";
            if (!locationFilters.ContainsKey(locationFilter))
            {
                // выходит ошибка, что ключ уже существует
                locationFilters.Add(locationFilter, new List<FlattenLocationFilter>
                {
                    new()
                    {
                        FilterCode = locationFilter,
                        FilterOperator = "AND",
                        CriteriaCode = "Location",
                        CriteriaOperator = "OR",
                        ExpectedValue = "Auchan",
                        ExpectedOperator = "EQ",
                        FilterDescription = "none",
                        LocationPropertyCode = "none"
                    }
                });

                flatlist.Add(new FlattenPromo
        {
            PromoCode = promoCode,
            PromoBegin = src.StartDate.ToDateTime(TimeOnly.MinValue, DateTimeKind.Utc),
            PromoEnd = src.EndDate.ToDateTime(TimeOnly.MinValue, DateTimeKind.Utc),
            LocationFilterCode = locationFilter,
            LocationFilter = locationFilters[locationFilter], // выходит ошибка keyNotFoundException
            ProductCode = src.ProductId,
            ProductDiscountPercent = src.DiscountPercent,
            ProductPlanQuantity = src.PlanSum,
        });
            }
        }
    }
}

Профессия

C#-разработчик

Сопроводим до оффера

Умножим шансы на каждом этапе поиска и поможем получить выгодный оффер

Узнать больше

Сервис развития карьеры

Контактыteam@h.careers@hcareers
TelegramVKYouTubeLinkedIn
Профессии
Компания
С чем помогаемОтзывыВопросы и ответыСертификатыВебинарыСтать ментором

Платформа принадлежит ООО "Эйч Карьера"
ИНН 9710095807 ОГРН 1227700077340
Адрес: 127006, город Москва, Старопименовский пер, д. 18 стр. 2, помещ./ком./этаж I/19/2

Copyright © 2020-2025 Сервис развития карьеры Эйч. Все права защищены.

Политика конфиденциальностиПользовательское соглашениеОферта