2016-02-14 2 views
0

мне не удалось получить значение шпагатом ключаKeyNotFoundException в словаре шпагатом ключа

... 
Dictionary<string, Data> dateDic = new Dictionary<string, Data>(); 
... 

public void GetDataList(string _code, int _startDate, int _limit, out List<Data> _list) 
{ 
    _list = (from data in dateDic[_code].Values  // <= System.Collections.Generic.KeyNotFoundException!!! 
      where data.date >= startDate 
      orderby data.date descending 
      select data).Take(_limit).ToList<Data>(); 
} 

переменная _code является 027410

В окне просмотра:

stockShcodeDic [_code] System.Collections. Generic.KeyNotFoundException < = Ошибка stockShcodeDic ["027410"] {Base.Data} Base.Data < = OK

+5

ты уверен, что есть только '027410'. строка может содержать нулевой символ '\ 0', но он не отображается –

+5

Вы используете' dateDic' в коде. Позже вы ссылаетесь на 'stockShcodeDic [" 027410 "]' в порядке. Являются ли эти словари одинаковыми? –

+1

По-видимому, '_code' отсутствует в словаре. Когда вы получите исключение, попробуйте в окне Watch '_code ==" 027410 "'. –

ответ

3

Ключ нет в словаре, вы можете справиться с этим с помощью Dictionary.TryGetValue

List<Data> listValues; // Assuimging dateDic[_code].Values is of type List<Data> 
listValues = dateDic.TryGetValue(_code, out value); 
_list = listValues .where(x=>x.data.date >= startDate).orderby(data.date descending).Select(x=>x.data).ToList<Data>();; 

или еще проще

public void GetDataList(string _code, int _startDate, int _limit, out List<Data> _list) 
{ 
    if(dateDic.ContainsKey("_code")) 
    { 
     return; 
    } 
    _list = (from data in dateDic[_code].Values  // <= System.Collections.Generic.KeyNotFoundException!!! 
      where data.date >= startDate 
      orderby data.date descending 
      select data).Take(_limit).ToList<Data>(); 
} 
Смежные вопросы