0x49D1

0L4g0YDQsNC30YDQsNCx0L7RgtC60LUsINC00LvRjyDRgNCw0LfRgNCw0LHQvtGC0YfQuNC60L7QsiA=

LINQ-просто хорошая штука..


Вот понадобилось создать создавать и удобно работать с настройками для сторонней программы(написанной, к слову, на Дельфи). Как решилась проблема и причем тет LINQ?

Формат настроек для «чужой» программы:

  • NAME1 value1
  • NAME2 value2
  • [OTHER_PROPERTY]

То есть видок старого-доброго конфига для многих программ.

Для начала был создан класс для удобной работы с настройками той программы. Согласитесь, удобно использовать у себя в коде при работе какие-то объекты, вместо прочитанных строк.  Затем этот класс сериализуем в, например, XML(чтоб было бы удобно с ним работать на любой платформе) и пересохраняем в формат конфига для «чужой» программы.

Пример:

// folderBrowserDialog is instance of FolderBrowserDialog class.
 string path = folderBrowserDialog.SelectedPath;
 fs = new FileStream(path + "config.xml", FileMode.OpenOrCreate);
 XmlSerializer xml = new XmlSerializer(typeof(ClientConfiguration));
 // cc-some ClientConfiguration object we want to serialize
 //(previously we could have worked with its properties and made some changes based on some logic)
 xml.Serialize(fs, cc);  

 fs.Close();
 // get list of elements with
 //values from xml serialized
 //ClientConfiguration object
 List<XElement> o = (from a in XDocument.Load(path + "config.xml").
 Elements("ClientConfiguration").Elements() select a).ToList();
 StreamWriter sr = new StreamWriter(path + "config", true);
 foreach (var xElement in o)
 {
 // save in format of "NAME value" list
 sr.WriteLine(xElement.Name + " " + xElement.Value);
 }
 sr.Close();

То, что я хотел показать это простота работы с XML в данном случае:

from a in XDocument.Load(path + "config.xml").
Elements("ClientConfiguration").Elements() select a

- точно так же работается и с ЛЮБЫМИ* коллекциями данных)

*-нууу, почти любыми, лишь бы был провайдер(если его нет-можно и свой написать, хотя большинство крупных фирм уже приготовили LINQTO"some product" провайдеры, так что нам, обычно, мучиться не придется =) )
Реклама

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: