2012-02-14 2 views
1

Работа с приложением, которое считывает некоторые значения из файла customer.xml в пользовательский интерфейс.linq to xml проверить, существует ли ключ?

Linq для XML-кода:

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-файла конкретного клиента я получаю ошибку «данный ключ отсутствует в словаре»

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

ответ

1
if (Settings.ContainsKey("CustomerA")) 
{ 
    txtLName.Text = Settings["CustomerA"].Node.attribute("value").Value; 
} 

EDIT:

Вы можете перебрать ключи Доступ к ключам коллекцию свойств:

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

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

IList<string> filteredKeys = new List<string> { "A", "B" }; 
Settings.Where(kv => filteredKeys.Contains(kv.Key)); 
+0

Этот тоже работает: txtLName.Text = Settings.ContainsKey ("CustomerA")? Настройки [ "customerÃ"] Node.attribute ("значение") Значение:.. Null; – Macnique

+0

Интересно, что это достаточно хорошо для двух или трех значений, если я хочу, чтобы в графическом интерфейсе отображалось больше ключей? – Macnique

+0

@Macnique: правильно, но я предпочитаю более чистый код (по моему личному мнению) – sll

4

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

2

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

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

+0

Интересно это достаточно хорошо для двух или трех значений, если я хочу, чтобы в графическом интерфейсе отображалось больше ключей? Есть ли способ, которым я могу зацикливать словарь и узнать, какие существуют и которого нет? – Macnique

+0

Да, вы можете это сделать, перейдя по списку значений ключей, которые вы хотите проверить, и проверьте возвращаемое значение ContainsKey для каждого из них. Вы также можете получить список всех ключей в словаре, используя «dictionary.Keys» и перейдя через это, чтобы получить фактические значения для ключей в словаре. – David

Смежные вопросы