Benutzer mit den meisten Antworten
Rückgabewerte einer Struktur optimieren

Frage
-
Hallo,
ich muss Werte als double setzen können.
Für eine Datei benötige ich jedoch String.
Gibt es da Möglichkeiten?
ToString überschreiben.
Oder über get, sprich wenn ich abfrage es als string zurückkommt?
Grüße Andreaspublic struct Struct_Marke { /// <summary> /// /// </summary> public double PosX { set; get; } public double PosY { set; get; } public double DeltaX { set; get; } public double DeltaY { set; get; } public string StringPosX() { string ret = String.Format("{0:0.000}", PosX ); return ret; } public string StringPosY() { string ret = String.Format("{0:0.000}", PosY); return ret; } public string StringDeltaX() { string ret = String.Format("{0:0.000}", DeltaX); return ret; } public string StringDeltaY() { string ret = String.Format("{0:0.000}", DeltaY); return ret; } public void Init() { PosX = 0; PosY = 0; DeltaX = 0; DeltaY = 0; } }
Antworten
-
Hallo Andreas,
wenn Du Linq To Xml verwendest kannst Du Dir die "Stringerei" sparen.
Dort wird automatisch eine Konvertierung nach Xml Standards vorgenommen,
dies gilt in beide Richtungen.Wenn Du lernen willst lies Informationen zum Programmieren (LINQ to XML)
Im übrigen solltest Du für Deine Marke eine Klasse anstatt einer Struktur verwenden,
wenn Du keine Überraschungen erleben willst, siehe u. a.:
Auswählen zwischen Klassen und StrukturenGruß Elmar
- Als Antwort markiert Andreas Bauer2 Mittwoch, 4. Juli 2012 15:05
-
Hallo Andreas,
entweder UTC Zeit oder DateTimeOffset, wenn Dir die Zeitzone wichtig ist.
Siehe dazu: Auswählen zwischen "DateTime", "DateTimeOffset" und "TimeZoneInfo"Weiteres gibt es bei Jon Skeet nachzulesen:
http://msmvps.com/blogs/jon_skeet/archive/2012/05/02/more-fun-with-datetime.aspx"ToString" ist auch hier nicht notwendig, da LINQ To Xml das Notwendige mitbringt.
Gruß Elmar
- Als Antwort markiert Andreas Bauer2 Mittwoch, 4. Juli 2012 17:46
Alle Antworten
-
Hi Andreas,
wenn du das Konvertieren und Formatieren, nur beim Wegschreiben in die Datei brauchst.
Solltest du es du es auch nur da machen.
Schick ist es dann das Wegschreiben der Werte über ein Interface zu kapseln.
In der Form:
interface Struct_Marke_Writer
{
void Write(Array Marks)
}(Ich habe jetzt nicht auf Rechtschreibung und Syntax geachtet)
Du kannst dann bei bedarf das Schreiben der Daten ändern und auch die Formatierung.
zB.
XML_Struct_Mark_Writer Implements Struct_Marke_Writer
CSV_Struct_Mark_Writer Implements Struct_Marke_Writer
DB_Struct_Mark_Writer Implements Struct_Marke_Writer
MFG
Björn
-
Hallo Andreas,
das hängt vom Dateiformat ab. Wenn ich Deine anderen Fragen in Betracht ziehe,
willst Du Xml schreiben, da wäre XmlConvert die richtigere Wahl -
wenn man die Arbeit nicht gleich einem Xml-Serializer überlässt.Ansonsten: Zahlen in Dateien sollten i. a. kulturinvariant abgelegt werden,
damit sie unabhängig von der Benutzerkultur interpretiert werden können.
Für einzelne Werte kann man mit der ToString Methode gleiches erreichen wie mit String.Format:public string PosXToString() { return this.PosX.ToString("F3", CultureInfo.InvariantCulture); }
weiteres siehe Standardmäßige Zahlenformatzeichenfolgen
Gruß Elmar
-
das hängt vom Dateiformat ab. Wenn ich Deine anderen Fragen in Betracht ziehe,
willst Du Xml schreiben, da wäre XmlConvert die richtigere Wahl -
wenn man die Arbeit nicht gleich einem Xml-Serializer überlässt.Hallo Elmar,
ja.
Wenn es jemand besser weiß, gerne. Möchte ja lernen.
Grüße Andreas
public struct Struct_Marke { /// <summary> /// /// </summary> public double PosX { set; get; } public double PosY { set; get; } public double DeltaX { set; get; } public double DeltaY { set; get; } public string StringPosX() { string ret = String.Format("{0:0.000}", PosX ); return ret; } public string StringPosY() { string ret = String.Format("{0:0.000}", PosY); return ret; } public string StringDeltaX() { string ret = String.Format("{0:0.000}", DeltaX); return ret; } public string StringDeltaY() { string ret = String.Format("{0:0.000}", DeltaY); return ret; } public void Init() { PosX = 0; PosY = 0; DeltaX = 0; DeltaY = 0; } } public class MeasurementMarke { public Struct_Marke StructPoint_01; public Struct_Marke StructPoint_02; public Struct_Marke StructPoint_03; public string GroupID; public void Init() { StructPoint_01.Init(); StructPoint_02.Init(); StructPoint_03.Init(); } } private void WriteMeasurementMarke(string fileMeasurementMarke) { MeasurementMarke TraceMeasurementMarke = new MeasurementMarke(); Random r = new Random(); int zufall = r.Next(0, 10000); TraceMeasurementMarke.GroupID = "11111111111" + String.Format("{0:00000}", zufall); // DateTime.Now.Second.ToString(); TraceMeasurementMarke.StructPoint_01.PosX = 34.44; TraceMeasurementMarke.StructPoint_01.PosY = 34.44; TraceMeasurementMarke.StructPoint_01.DeltaX = 34.44; TraceMeasurementMarke.StructPoint_01.DeltaY = 34.44; TraceMeasurementMarke.StructPoint_02.PosX = 34.44; TraceMeasurementMarke.StructPoint_02.PosY = 34.44; TraceMeasurementMarke.StructPoint_02.DeltaX = 34.44; TraceMeasurementMarke.StructPoint_02.DeltaY = 34.44; TraceMeasurementMarke.StructPoint_03.PosX = 34.44; TraceMeasurementMarke.StructPoint_03.PosY = 34.44; TraceMeasurementMarke.StructPoint_03.DeltaX = 34.44; TraceMeasurementMarke.StructPoint_03.DeltaY = 34.44; XDocument xDoc; XElement marke; if (File.Exists(fileMeasurementMarke)) { xDoc = XDocument.Load("C:\\Point_2.XML"); marke = xDoc.Element("Markes").Element("Marke"); } else { xDoc = new XDocument(new XComment("Marke values")); //XDocument xDoc = XDocument.Load("C:\\Point_2.XML"); // Add xDoc.Add(new XElement("Markes")); // Add Child var marken = xDoc.Root; marken.Add(new XElement("Date", DateTime.Now.ToString())); marken.Add(new XElement("Marke")); marke = xDoc.Element("Markes").Element("Marke"); } marke.Add(new XElement("Marke", new XAttribute("PanelId", TraceMeasurementMarke.GroupID), new XAttribute("F1_PosX", TraceMeasurementMarke.StructPoint_01.StringPosX()), new XAttribute("F1_PosY", TraceMeasurementMarke.StructPoint_01.StringPosY()), new XAttribute("F1_DeltaX", TraceMeasurementMarke.StructPoint_01.StringDeltaX()), new XAttribute("F1_DeltaY", TraceMeasurementMarke.StructPoint_01.StringDeltaY()), new XAttribute("F2_PosX", TraceMeasurementMarke.StructPoint_02.StringPosX()), new XAttribute("F2_PosY", TraceMeasurementMarke.StructPoint_02.StringPosY()), new XAttribute("F2_DeltaX", TraceMeasurementMarke.StructPoint_02.StringDeltaX()), new XAttribute("F2_DeltaY", TraceMeasurementMarke.StructPoint_02.StringDeltaY()), new XAttribute("F3_PosX", TraceMeasurementMarke.StructPoint_03.StringPosX()), new XAttribute("F3_PosY", TraceMeasurementMarke.StructPoint_03.StringPosY()), new XAttribute("F3_DeltaX", TraceMeasurementMarke.StructPoint_03.StringDeltaX()), new XAttribute("F3_DeltaY", TraceMeasurementMarke.StructPoint_03.StringDeltaY()) )); xDoc.Save(fileMeasurementMarke); }
-
Hallo Andreas,
wenn Du Linq To Xml verwendest kannst Du Dir die "Stringerei" sparen.
Dort wird automatisch eine Konvertierung nach Xml Standards vorgenommen,
dies gilt in beide Richtungen.Wenn Du lernen willst lies Informationen zum Programmieren (LINQ to XML)
Im übrigen solltest Du für Deine Marke eine Klasse anstatt einer Struktur verwenden,
wenn Du keine Überraschungen erleben willst, siehe u. a.:
Auswählen zwischen Klassen und StrukturenGruß Elmar
- Als Antwort markiert Andreas Bauer2 Mittwoch, 4. Juli 2012 15:05
-
wenn Du Linq To Xml verwendest kannst Du Dir die "Stringerei" sparen.
Hallo Elmar,
ist doch richtig, LinQ To XML zu verwenden, oder?
<Marke MeasureDate="04.07.2012 09:09:26" Id="1111111111107289" M1_PosX="34.440"
Frage beantwortet.
Vielleicht noch XML konfirmes Datum. Da gibt es ja auch einiges.
- Datum, Zeit +1
- Datum, Zeit +2 Sommerzeit
- oder nur Zeit
Was empfiehlst du da?
Grüße, Andreas
- Bearbeitet Andreas Bauer2 Mittwoch, 4. Juli 2012 15:05 Format
-
Hallo Andreas,
entweder UTC Zeit oder DateTimeOffset, wenn Dir die Zeitzone wichtig ist.
Siehe dazu: Auswählen zwischen "DateTime", "DateTimeOffset" und "TimeZoneInfo"Weiteres gibt es bei Jon Skeet nachzulesen:
http://msmvps.com/blogs/jon_skeet/archive/2012/05/02/more-fun-with-datetime.aspx"ToString" ist auch hier nicht notwendig, da LINQ To Xml das Notwendige mitbringt.
Gruß Elmar
- Als Antwort markiert Andreas Bauer2 Mittwoch, 4. Juli 2012 17:46