我定义我的自定义异常这样的:C#用户定义的异常不被抓住
[Serializable]
public class WrongFileException : Exception
{
public WrongFileException()
{
}
public WrongFileException(string message) : base(message)
{
}
public WrongFileException(string message, Exception innerExeException) : base(message, innerExeException)
{
}
}
我有一个打开文件按钮,我想抛出一个异常时,它是错误的文件:
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();
}
测试它试图打开一个文件,将无法正常工作我得到“WrongFileException未处理”。我不明白为什么,因为我正在捕捉异常?
必须从'try'块引发异常才能被捕获。 –
Y catch-statement只能处理由它们涉及的'try'-block引起的异常。把你的序列化程序语句*放到try-block中,然后完成。 – HimBromBeere
@GabrielNegut这是答案,而不是评论。如果你把它写成答案,我可以删除我的。 –