linq to xml проверить, существует ли ключ? - PullRequest
1 голос
/ 14 февраля 2012

Работа над приложением, которое считывает некоторые значения из файла customer.xml в пользовательский интерфейс.

Linq to xml code:

var Settings = (from e in customer.Descendants("appSettings")
                                   from kvpair in e.Elements("Name")
                                   select new
                                   {
                                       Name = kvpair.Attribute("Zip").Value,
                                       Node = kvpair
                                   }).ToDictionary(x => x.Name, y => y);

txtFName.Text==Settings["CustomerA"].Node.attribute("value").Value;
txtLName=Settings["CustomerB"].Node.attribute("value").Value;

Я могу получить значения в GUI из файла XMl по вышеуказанному коду.

Мой вопрос: когда я закомментирую какой-либо элемент или данные из xml-файла определенного клиента, я получаю сообщение об ошибке «указанный ключ отсутствует в словаре»

Как мне динамически проверить, существует ли ключ в словаре, если только затем прочитать это значение или получить следующее значение?

Ответы [ 3 ]

4 голосов
/ 14 февраля 2012

Вы ищете методы ContainsKey() или TryGetValue().

2 голосов
/ 14 февраля 2012

«Правильный» способ проверить наличие ключа в словаре - это использовать функцию ContainsKey. dictionary.ContainsKey(keyValue);

Однако вы можете спросить себя, почему ключа нет и должен ли он быть там.

1 голос
/ 14 февраля 2012
if (Settings.ContainsKey("CustomerA"))
{
   txtLName.Text = Settings["CustomerA"].Node.attribute("value").Value;
}

EDIT:

Вы можете перебирать ключи, обращающиеся к коллекции свойств Keys:

foreach (var key in Settings.Keys)
{
   // ..
}

Также вы можете использовать LINQ для фильтрации того, что вам нужно:

IList<string> filteredKeys = new List<string> { "A", "B" };
Settings.Where(kv => filteredKeys.Contains(kv.Key));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...