(1) Mam liste obiektów "datas" która przechowuje ustawienia początkowe.
(2) Ustawienia definiują który obszar xml będzie przeszukiwany
(3) Nody XML definiują które wartości obiektu mają być zmienione,
Pytanie: w jaki sposób zaimplementować tylko raz proocedurę modyfikacji obiektów?
Obecnie wygląda to tak:
XDocument xdocument;
XElement xelement;
IEnumerable<XElement> new_datas;
XElement xelement;
foreach (var c in datas)
{
// wczytaj plik main.xml
xdocument = XDocument.Load("main.xlm");
new_datas = xdocument.Elements();
foreach (var d in new_datas)
{
//zestaw tych samych instrukcji modyfikujacych obiekt:
//o ile wystąpi rozkaz zmiany parametru w pliku:
try
{
c.xray += int.Parse(d.Element("X-ray").Value);
}
catch {}
//...
//kolejne instrukcje
}
// wczytaj plik mod1.xml, tylko 1 wybor mozliwy
xelement = XElement.Load("mod1.xlm");
new_datas = xelement.Elements();
int i = 0;
foreach (var d in new_datas)
{
//zestaw tych samych instrukcji modyfikujacych obiekt:
//o ile wystąpi rozkaz zmiany parametru w pliku:
if (c.mod1 == i)
{
try
{
c.xray += int.Parse(d.Element("X-ray").Value);
}
catch {}
//...
//kolejne instrukcje
}
i++;
}
// wczytaj plik mod2.xml, molziwy wieokrotny wybor
xelement = XElement.Load("mod2.xlm");
new_datas = xelement.Elements();
i = 1;
foreach (var d in new_datas)
{
if (c.lista[i] == 1)
{
//zestaw tych samych instrukcji modyfikujacych obiekt:
//o ile wystąpi rozkaz zmiany parametru w pliku:
try
{
c.xray += int.Parse(d.Element("X-ray").Value);
}
catch {}
//...
//kolejne instrukcje
}
i++;
}
}
"Zestaw tych samych instrukcji" zawiera modyfikatotry obiektu w zależności od obecności i wartości nodów w xml.
Jest ich ok. 100, więc powtarzanie ich 3x jest bez sensu, nie mówiąc o ryzyku błędu.