Обновление xml-файла с использованием linq в xml - PullRequest
0 голосов
/ 15 февраля 2012

Я пытаюсь обновить XML-файл, используя следующий код из моего графического интерфейса.

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

Settings["CustomerA"].Node.Attribute.value=txtCustomerA.Text;

Приведенный выше код работает нормально:

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

if(settings.containskey("CustomerA"))
    Settings["CustomerA"].Node.Attribute.value=txtCustomerA.Text;

Это тоже отлично работает.

Но я сказал, что 20 записей должны быть обновлены, я пытаюсь таким образом, чтобы избежать, если оператор для каждого обновления

Settings["CustomerA"].Node.Attribute.value=settings.containskey("CustomerA") ?txtCustomerA.Text:null;

но приведенный выше код выдает исключение, ключ не существует в словаре ???

Мне просто было любопытно обойтись, чтобы избежать 20 заявлений. Буду рад, если кто-нибудь мне поможет.

1 Ответ

1 голос
/ 15 февраля 2012

Вы можете создать словарь сопоставления и выполнить цикл по нему:

var mappings = new Dictionary<string, Func<string>>
{
    {"CustomerA", () => txtCustomerA.Text},
    {"CustomerB", () => txtCustomerB.Text},
    {"CustomerC", () => txtCustomerC.Text},
    // etc....
};

foreach(var pair in mappings)
{
    Settings[pair.Key] = (Settings.ContainsKey(pair.Key)) ? pair.Value() : null;
}

Это все еще действительно не позволяет вам сэкономить много кода, но оно избегает 20+ if операторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...