Есть ли способ улучшить это? Я чувствую, что у меня есть путь ко многим петлям.
Код создает строку с именами доменов из документа XML. В зависимости от того, находится ли имя домена в XML do c в элементах hostSW (хост начинается с), hostCN (хост содержит) или hostEW (хост EndsWith), зависит от того, нужно ли мне добавлять * в конец, начало + конец или начало значения соответственно.
Я использовал Hashset как способ убедиться, что дублирования нет.
var startWith = xdoc.Root
.Descendants("Test")
.Elements("hostSW")
.ToList();
var contains = xdoc.Root
.Descendants("Test")
.Elements("hostCN")
.ToList();
var endsWith = xdoc.Root
.Descendants("Test")
.Elements("hostEW")
.ToList();
HashSet<string> domains = new HashSet<string>(); //use hashset so we don't duplicate results
foreach (XElement test in startWith)
{
domains.Add(test.Value.ToString() + "*");
}
foreach (XElement test in contains)
{
domains.Add("*" + test.Value.ToString() + "*");
}
foreach (XElement test in endsWith)
{
domains.Add("*" + test.Value.ToString());
}
string out = "BEGIN FILE ";
foreach (string domain in domains.ToArray())
{
out += "BEGIN DOMAIN ";
out += domain;
out += " END DOMAIN";
}
out += " END FILE;
return out;
XML file
<Tests>
<Test>
<hostSW>startsWith1</hostSW>
</Test>
<Test>
<hostSW>startsWith2</hostSW>
</Test>
<Test>
<hostCN>contains1</hostCN>
</Test>
<Test>
<hostEW>endsWith1</hostEW>
</Test>
</Tests>