System.Collections.Generi c .KeyNotFoundException с ключом кортежа - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть словарь с ключом Tuple, например:

private readonly IDictionary<Tuple<string, string>, List<Bom>> bomCache
            = new Dictionary<Tuple<string, string>, List<Bom>>();

Я использовал его как кэш для метода:

        private async Task<List<Bom>> buildActiveBoms(string materialId, string plantId) {
            var key = new Tuple<string, string>(materialId, plantId);
            if (!bomCache.ContainsKey(key)) {
                try {
                    bomCache[key] = await loadList($"Bom:{materialId}:{plantId}", document => new Bom {
                        BomStatusId = document["BomStatusId"],
                        BomTypeId = document["BomTypeId"]
                    });
                }
                catch (Exception error) {
                    logger.Error(error);
                    throw;
                }
            }

            // how, after above condition, this entry can still not exist?
            try {
                return bomCache.ContainsKey(key) ? bomCache[key] : new List<Bom>();
            }
            catch (Exception error) {
                logger.Error(error);
                throw;
            }
        }

loadList() всегда возвращается в наименее пустой список, но даже для гарантии того, что это обработано, после добавления условного возврата (проверка ContainsKey()) я все еще получил `KeyNotFoundException:

debug session

Что может быть причиной этого и как смягчить это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...