2012-05-17 4 views
0

Здесь я немного озадачен. Я получаю это исключение, которое говорит мне, что этого ключа не существует. Когда я смотрю на все пары ключ/значение в словаре в окне просмотра, этот ключ находится здесь! Я не думаю, что сойду с ума, но мог бы быть. Я что-то упустил? Вот код:KeyNotFoundException в словаре на C#

public static List<Quote> GetQuoteHistory(int id) 
{ 
    List<Quote> quotes = DataAccess.GetQuoteHistory(id); 
    SetAckCodeDescriptions(quotes); 
    return quotes; 
} 

private static void SetAckCodeDescriptions(IEnumerable<Quote> quotes) 
{ 
    Dictionary<string, string> ackData = GetAcknowlegementData(); 

    foreach (Quote quote in quotes) 
    { 
     quote.AckCodes = GetAckCodeHtml(quote.AckCodes, ackData); 
    } 
} 

private static string GetAckCodeHtml(string ackCodes, IDictionary<string, string> ackData) 
{ 
    string[] codes = ackCodes.Split(','); 

    string html = string.Empty; 
    foreach (string code in codes) 
    { 
     html += string.Format("<div title='#= {0} #'>#= {1} #</div>, ", ackData[code], code); 
    } 

    return html.TrimEnd(new []{',', ' '}); // remove extra comma and space 
} 

UPDATE:

public static Dictionary<string, string> GetAcknowlegementData() 
{ 
    List<AckData> list = DataAccess.GetAcknowlegementData(); 
    return list.ToDictionary(o => o.AcknowledgementCode, o => o.Description); 
} 
+1

Можете ли вы разместить код для 'GetAcknowlegementData()'? – rsbarro

+0

Вы уверены, что значение 'code' - это то, что вы ожидаете, когда оно используется в качестве индекса? Возможно, он содержит посторонние символы/пробелы. –

+0

@SteveTownsend достаточно. Я просто подумал, что я что-то упустил. :) –

ответ

2

Try перебрать значения/пары в словаре. Посмотрите, есть ли у вас на самом деле элемент (глаза могут лежать).

foreach (var pair in ackData) 
{ 
    Console.WriteLine("{0},{1}", pair.Key, pair.Value); 
} 
+0

Я сделаю это. – birdus

+1

и проверьте, содержат ли ваши записи в кодах пробелы в конце после сплит-кода (обрезать, если они есть). –

+0

Так оно и было. Был (по крайней мере, на некоторых) пробел, предшествующий коду. Спасибо за проверку работоспособности. – birdus