Ostatnio miałem okazję pobawić się troszkę Linq to Xml (czasami też nazywane XLinq). Miła technologia. Do pewnych zastosowań nadaje się lepiej niż do innych ale ogólnie bardzo mi się podoba. Przez (krótką) chwilę miałem ochotę przejrzeć listę swoich projektów i - tam gdzie to możliwe - podmienić istniejący kod na Linq to Xml. Na szczęście szybko porzuciłem ten pomysł bo istniejący kod był przetestowany i działał poprawnie. Zmiana pociągnełaby za sobą niepotrzebne koszty (czas potrzebny na kodowanie, testy jednostkowe, testowanie itp.) oraz ryzyko wprowadzenia błędów. Trudno mi było znaleźć usprawiedliwienie dla takiego refaktoringu. O wiele bezpieczeniejsze (i tańsze) było pozostawienie istniejącego kodu bez zmian, i zastosowanie nowej technologii tylko w nowym kodzie. Przy takim podejściu trzeba było znaleźć odpowiedź na pytanie: W jaki sposób przekonwertować model danych używany w 'starym' kodzie na model danych używany w 'nowym' kodzie? W tym konkretnym przypadku - 'stary' kod używa klas z przestrzeni nazw System.Xml, a 'nowy' kod będzie dodatkowo używał Linq to Xml (czyli klas z przestrzeni nazw System.Xml.Linq). Okazało się, że konwersja - niezależnie od tego, w którą stronę konwertujemy - jest dziecinnie prosta. W dziale Sztuczki Kruczki jest pokazane jak ona wygląda.