Ce que j'est maintenant le code suivant:Parse XML en utilisant LINQ et remplir les propriétés d'un objet existant plutôt que de créer un nouveau
Tutorial tutorial =
(from tutorial in xmlDoc.Descendants("Tutorial")
select new Tutorial
{
Author = tutorial.Element("Author").Value,
Title = tutorial.Element("Title").Value,
Date = DateTime.Parse(tutorial.Element("Date").Value),
}).First();
myTutorial.Author = tutorial.Author;
myTutorial.Title = tutorial.Title;
myTutorial.Date = tutorial.Date;
myTutorial est passé d'une autre méthode. Et le code ci-dessous doit le "remplir".
La question est: existe-t-il un moyen de créer une requête LINQ, qui affectera des valeurs aux propriétés d'un objet existant, plutôt que de créer un nouveau.
Je voudrais que mon code pour ressembler à ceci:
Tutorial tutorial =
(from tutorial in xmlDoc.Descendants("Tutorial")
select myTutorial
{
Author = tutorial.Element("Author").Value,
Title = tutorial.Element("Title").Value,
Date = DateTime.Parse(tutorial.Element("Date").Value),
});
Le problème que j'ai est: J'ai un objet qui a d'abord seulement la moitié de ses propriétés de définir, plus tard, je dois remplir le reste des propriétés. Cela doit être fait de manière asynchrone.
Mon approche: J'utilise la méthode asynchrone de WebClient
DownloadStringAsync
pour télécharger le fichier XML. Dans le gestionnaire d'événements, je ne veux pas remplir un objet avec les propriétés qui lui manquent. Et c'est pourquoi je voudrais passer directement des valeurs à mon objet plutôt que d'en créer une nouvelle.
S'il vous plaît laissez-moi savoir si ce n'est pas la meilleure approche.
Etes-vous sûr que le 1er exemple est compilé? Je pense que vous avez besoin d'un .First() là-bas. –
oui oui! Je viens de taper le code ici, donc j'ai manqué le .First(). – Vitalij
btw, vous pourriez vouloir noter l'utilisation de * cast * plutôt que '.Value' dans la réponse que je donne; en plus d'utiliser les formats xml corrects (ie les dates xml ne sont pas les mêmes que 'DateTime.Parse') cela réagit de manière appropriée si des éléments sont manquants - par exemple lancer à' (DateTime?) 'retournera une valeur nulle si l'élément est manquant, plutôt que le '.Value' étant une exception null-ref. –