ich so meine benutzerdefinierte Ausnahme definiert:C# benutzerdefinierte Ausnahme nicht
[Serializable]
public class WrongFileException : Exception
{
public WrongFileException()
{
}
public WrongFileException(string message) : base(message)
{
}
public WrongFileException(string message, Exception innerExeException) : base(message, innerExeException)
{
}
}
Ich habe einen Knopf, der eine Datei öffnet und ich möchte eine Ausnahme werfen, wenn es die falsche Datei ist:
private void PanelOpen_Click(object sender, RoutedEventArgs e)
{
Microsoft.Win32.OpenFileDialog opendlg = new Microsoft.Win32.OpenFileDialog();
opendlg.DefaultExt = ".xml";
opendlg.Filter="XML Files|*.xml";
Nullable<bool> result = opendlg.ShowDialog();
if (result == true)
{
XmlSerializer XMLSerial = new XmlSerializer(typeof(List<Panel>));
FileStream fsCheck = new FileStream(opendlg.FileName, FileMode.Open);
XmlReader reader = new XmlTextReader(fsCheck);
fsCheck.Close();
if (!XMLSerial.CanDeserialize(reader))
{
throw (new WrongFileException("Wrong data sructure for PanelList"));
}
try
{
using (FileStream fsRead = new FileStream(opendlg.FileName, FileMode.Open, FileAccess.Read))
{
PanelList = XMLSerial.Deserialize(fsRead) as List<Panel>;
}
PanelBoxListView.ItemsSource = PanelList;
PanelBoxListView.Items.Refresh();
}
catch(WrongFileException q)
{
MessageBox.Show("WrongFileException: {0}", q.Message);
throw;
}
}
CheckForListEntries();
}
Testen Sie es versuchen, mit einer Datei zu öffnen, die nicht funktioniert Ich bekomme "WrongFileException wurde nicht behandelt". Ich verstehe nicht warum, weil ich die Ausnahme erhalte?
Die Ausnahme muss aus dem "try" -Block geworfen werden, um abgefangen zu werden. –
Y catch-statement kann nur jene Ausnahmen behandeln, die durch den 'try'-Block verursacht wurden, auf den sie sich beziehen. Setzen Sie Ihre Serializer-Anweisungen * in den try-Block und fertig. – HimBromBeere
@GabrielNegut Das ist die Antwort, kein Kommentar. Wenn Sie es als Antwort schreiben, kann ich meine entfernen. –