簡體   English   中英

C# 用戶定義的異常未被捕獲

[英]C# user defined exception not being caught

我像這樣定義了我的自定義異常:

[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 未處理”。 我不明白為什么,因為我正在捕獲異常?

你的throw (new WrongFileException(...)); try之前,所以try - catch永遠不會變得相關。

只有在 try 塊中拋出異常時,它才會捕獲。

            try
            {
                if (!XMLSerial.CanDeserialize(reader))
                {
                    throw (new WrongFileException("Wrong data sructure for PanelList"));
                 }
                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; throw only if you handle/log it down the track
            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM