をキャッチされていない私は定義された私のカスタム例外: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が未処理です"というメッセージが表示されます。なぜ私は例外をキャッチしているので、私はなぜ取得していないのですか?
キャッチするために、例外は '試行'ブロックからスローされなければなりません。 –
Y catch文は関連する 'try'ブロックによって引き起こされた例外のみを処理できます。あなたのシリアライザ文*をtryブロックとdoneに入れてください。 – HimBromBeere
@GabrielNegutこれは答えであり、コメントではありません。あなたが答えとしてそれを書くなら、私は私を取り除くことができます。 –