Hallo hab mal ne Frage und zwar muss ich bei einem kleinen Programm die Registry auslesen. Was ich allerdings nicht verstehe: wenns den Schlüssel, den ich auslesen möchte (mit RegKey.GetValue()) nicht gibt dann bekomme ich nur ne normale System.NullReferenceException.
Hab jetzt das Problem da nicht drauf reagieren zu können weil ich da nen ganzen Block in nem Trycatch Block hab und allgemein auf Exceptions reagiere. Und als Fehlermeldung kommt jetzt logischerweise nur die Exception raus mit nem nichtssagenden Text 🙁 jemand ne Idee?
Was für eine Idee sollten wir haben? Spezifiziere bitte! Die Fehlermeldung ist doch völlig ok! Du kannst doch auch try - Catch schachteln, also umklammere doch einfach die entsprechende Anweisung mit einem neuen try - catch und schln funzt die Sache wie Du willst. .... Nein, es geht immer nur einmal in einen catch Zweig, der zweite wird nicht aufgerufen.
Hallo,
ich verstehe dein Problem nicht. Hast du Probleme die Exception abzufangen, weil du nicht weißt, wie du try catch einsetzt - dann wäre das ein Fall für's openbook.
Was meinst du mit
Hab jetzt das Problem da nicht drauf reagieren zu können weil ich da nen ganzen Block in nem Trycatch Block hab und allgemein auf Exceptions reagiere ? Kannst du vielleicht etwas (schemahaften) Code posten?
//EDIT: Und wieder zu spät...
Hallo KRambo,
Dir ist schon klar das Du in einem try catch einen weiteren try catch machen könntest?
aber vermutlich besser wäre der folgende Weg
try{
//CODE
}catch (NullReferenceException ne)
{
MessageBox.Show("registry is nich");
}
catch (exception e) {
MessageBox.Show("ein fehler");
}
nur bedenke das allgemein kommt immer im schluss
mfg
Ok Pseudocode:
try{
// Registry öffnen
RegKey = Registry.CurrentUser.OpenSubKey(Key, true);
// Wert auslesen und Combobox zuweisen
vString = RegKey.GetValue("wert").ToString();
this.cboBla.SelectedValue = vString;
} catch(Exception vEx) {
MessageBox.Show(vEx.Message);
}
Gibts nicht irgend ne Möglichkeit darauf zu reagieren wenn der Wert nicht vorhanden is und dann ne Exception händisch auslösen mit ner eigenen Bescheibung? Was will ein User mit ner NullReferenceException? Der kann ja nix damit anfangen. Wenn als Fehlermeldung aber ne Meldung kommen würde dass nicht auf die Registrierung zugegriffen werden kann das wär viel hilfreicher.
Nun verstanden? Sorry wenns undeutlich war was ich wollte.
Soll heißen in etwa in dieser Art hätt ichs gerne (darum auch erst in nen String schreiben):
vString = RegKey.GetValue("wert").ToString();
if (vString == null) then throw new Exception();
Funktioniert aber so nicht weil da schon die Exception ausgelöst wird, wenn ich vString den Wert zuweisen will.
Hallo,
wie schon die Beiträge vorher lauteten:
Entweder noch einen try / catch Block:
try
{
// Registry öffnen
RegKey = Registry.CurrentUser.OpenSubKey(Key, true);
// Wert auslesen und Combobox zuweisen
try
{
vString = RegKey.GetValue("wert").ToString();
}
catch
{
MessageBox.Show(/*Parameter*/);
return;
}
this.cboBla.SelectedValue = vString;
}
catch(Exception vEx)
{
MessageBox.Show(vEx.Message);
}
oder mehrere catch Blöcke:
try
{
// Registry öffnen
RegKey = Registry.CurrentUser.OpenSubKey(Key, true);
// Wert auslesen und Combobox zuweisen
vString = RegKey.GetValue("wert").ToString();
this.cboBla.SelectedValue = vString;
}
catch (NullReferenceException e)
{
MessageBox.Show(/*Parameter*/);
}
catch(Exception vEx)
{
MessageBox.Show(vEx.Message);
}
vString = RegKey.GetValue("wert").ToString(); if (vString == null) then throw new Exception();
kann nicht funktionieren, da du mit ToString() bereits auf einen null Verweis zugreifst.
//Edit: Außerdem ist "then" keine gültige C# Syntax 😉
Generell wäre aber besser:
object o = RegKey.GetValue("wert");
if (o == null)
{
MessageBox(/*und so weiter*/);
}
else
{
vString = o.ToString();
}
//EDIT: Mir muss richtig langweilig sein 🙂