Скажу просто, у меня была такая же ошибка, Value cannot be null
, при использовании ToDictionary()
и два значения ключа были одинаковыми.
Я не осознавал этого и нашел сообщение об ошибке немного вводящим в заблуждение, поскольку ни одно из моих значений не было нулевым.
Мое решение (применение его к вашей проблеме) состояло бы воригинальный код:
foreach (XmlNode node in relatoriosStaticos.DocumentElement.ChildNodes)
relatorios.Add(node.Attributes["Titulo"].InnerText, string.Concat(node.Attributes["Url"].InnerText, id));
и разделить его на две части.
Сначала заполните переменную List<>
списком ключей и значений, которые вы планируете поместить в Dictionary
.
public class KeysAndValues
{
public string Key;
public string Value;
public override string ToString()
{
return string.Format("{0}: {1}", Key, Value);
}
}
List<KeysAndValues> dict = new List<KeysAndValues>();
foreach (XmlNode node in relatoriosStaticos.DocumentElement.ChildNodes)
{
dict.Add(new KeysAndValues()
{
Key = node.Attributes["Titulo"].InnerText,
Value = string.Concat(node.Attributes["Url"].InnerText, id)
});
}
Далее получите код для проверки значений NULL и дублированных значений Key.
Если все хорошо, тогда мы можем преобразовать List <> в словарь.
foreach (KeysAndValues kv in dict)
{
relatorios.Add(kv.Key, kv.Value);
}
Это немного больше работы, но это удобный способ проверить Dictionary
проблемывместо ожидания возникновения исключения, если есть проблема с вашими данными.