Hallo Leute,
ich brauche mal eben einen Rat von euch. Ich habe ein Setting namens "debug". Damit möchte ich in meinem Programm debug Ausgaben einschalten können. Der Wert des Settings ist unter
Properties.Settings.Default.debug
abrufbar. Nun, ich habe irgendwie keine Lust den langen Rattenschwanz immer hinzuschreiben und dachte deshalb an eine Abkürzung. Deshalb habe ich einfach eine Klassenvariable deklariert und ihr den Wert des Settings zugewiesen:
private static bool debug = Properties.Settings.Default.debug;
Das Problem ist jetzt, dass wenn ich den Wert des Settings ändere, der Wert der statischen debug Variable immer noch der "alte" ist.
private static bool* debug = &Properties.Settings.Default.debug;
Ich könnte auch mit Pointern arbeiten, aber C# meldet mir: "Zeiger und Puffer fester Größe können nur in einem unsicheren Kontext verwendet werden."
Habt ihr eine Idee, wie ich einfach nur diesen langen Rattenschwanz abkürzen kann?
Das Problem ist jetzt, dass wenn ich den Wert des Settings ändere, der Wert der statischen debug Variable immer noch der "alte" ist.
Bool ist ja auch kein Referenztyp sondern ein Wertetyp.
Wrappe es in ein Property, dann kannst du es so machen wie du willst:
public static bool Debug
{
get
{
return Properties.Settings.Default.debug;
}
}
Gruß
Michael
Für diesen Zweck kannst du auch mit dem Präprozessor arbeiten.
Bei den Codestellen bei denen du abprüfen willst ob du im DEBUG Modus bist, kannst du auch einfach
#if DEBUG
...
#endif
schreiben. Der Code innerhalb dieser Direktive wird dann nur ausgeführt wenn du im Debug Modus bist. Dann brauchst du den Settingseintrag nicht mehr.
Lg
Oder du schaust dir das ConditionalAttribute an.
Ich bin zwar von der Lösung von xxMUROxx begeistert, weil es genau das war, was ich mir vorgestellt habe, allerdings möchte ich die anderen beiden Lösungen auch "irgendwie" umsetzbar.
Worum geht es mir?
Ich habe ein Programm entwickelt und das Programm als Installationspaket (also ohne Quellcodes) ausgeliefert. Die Debug Ausgabe wird an zwei Stellen benötigt:
catch (Exception eee)
{
String debugstring = "";
if (debug)
{
debugstring = " Debug Exception Message:\n\n" + eee.ToString();
}
MessageBox.Show("The calculation process cannot be displayed. Maybe the image is not ready or there is no current calculation running." + debugstring);
}
if(newCImageObjects.Count != numberOfNewObjects)
throw new Exception("something with the new object list is wrong...");
Im normalen Modus ist es allerdings kein Problem, wenn man die aktuelle Berechnung einfach abbricht und neustartet.
Ich finde, dass das Debug Setting hier richtig ist. Oder gibt es da eine Bessere alternative?
Hallo LL0rd,
die Alternativen von Blue_Dragon und winSharp93 wirken zur Compile-Time, man muss sich also schon beim Übersetzen entscheiden, ob man die Anwendung mit oder ohne Debugging-Code haben will. Wählt man "ohne", ist der Debugging-Code gar nicht in der Anwendung vorhanden. Bei deinem Vorschlag kannst du den Modus zur Laufzeit umschalten. Man kann nicht sagen, dass das eine besser ist als das andere. Beides hat seine Vor- und Nachteile.
herbivore