Down below is my code I'm currently using, but is there a way to make it cleaner and shorter? I want my code to look short efficient and nice looking. My teacher said something with "do it with a loop" but I can't figure out what that loop does and how it would work.
{
XmlWriter xmlWriter = XmlWriter.Create(PATH);
xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement("Config");
xmlWriter.WriteStartElement("TBSOMS");
xmlWriter.WriteString(TBSOMS.Text);
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("TBWVB");
xmlWriter.WriteString(TBWVB.Text);
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("TBWNB");
xmlWriter.WriteString(TBWNB.Text);
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("TBASPMM1");
xmlWriter.WriteString(TBASPMM1.Text);
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("TBASPMM2");
xmlWriter.WriteString(TBASPMM2.Text);
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("TBDUM");
xmlWriter.WriteString(TBDUM.Text);
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("TBADPR");
xmlWriter.WriteString(TBADPR.Text);
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("TBAR");
xmlWriter.WriteString(TBAR.Text);
xmlWriter.WriteEndElement();
xmlWriter.WriteEndDocument();
xmlWriter.Close();
}
I'd start with something like this...
var values = new Dictionary<string, string>
{
{ nameof(TBWVB), TBWVB.Text },
{ nameof(TBWNB), TBWNB.Text }
// .... etc ......
}
XmlWriter xmlWriter = XmlWriter.Create(PATH);
xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement("Config");
foreach (var item in values.Keys)
{
xmlWriter.WriteStartElement(item);
xmlWriter.WriteString(values[item]);
xmlWriter.WriteEndElement();
}
Something in the like of :
private void writeElement(XmlWriter xmlwrtr, String element, var obj){
xmlwrtr.WriteStartElement(element);
xmlwrtr.WriteString(obj.Text);
xmlwrtr.WriteEndElement();
}
Which would give :
{
XmlWriter xmlWriter = XmlWriter.Create(PATH);
xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement("Config");
writeElement(xmlWriter, "TBSOMS", TBSOMS)
writeElement(xmlWriter, "TBWVB", TBWVB)
// And so on
xmlWriter.WriteEndDocument();
xmlWriter.Close()
}
By creating a class variable you can access it's values in multiple methods.
private static XmlWriter xmlWriter;
public void Write()
{
xmlWriter = XmlWriter.Create(Path);
xmlWriter.WriteStartDocument();
xmlWriter.WriteStartElement("Config");
new List<(elementDataType element, string name)> // note that you need to change "elementDataType" to your elements data type
{
(TBSOMS, nameof(TBSOMS)),
(TBWVB, nameof(TBWVB)),
// ... just list all elements in here
}.ForEach(elem => WriteElement(elem.element, elem.name));
xmlWriter.WriteEndDocument();
xmlWriter.Close();
}
private void WriteElement(var element, string name) //note that you need to change var to your elements datatype
{
xmlWriter.WriteStartElement(name);
xmlWriter.WriteString(element.Text);
xmlWriter.WriteEndElement();
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.