获取InnerException会导致错误

Zat*_*h . 1 c# winforms

我从未见过这种情况发生在我多年的编程中,并且不得不问是否有其他人知道为什么这是....

            Excel.Worksheet worksheet;
        Excel.Sheets sheets;
        Excel.Workbook theWorkbook;
        Excel.Application ExcelObj = null;

        try
        {
            ExcelObj = new Excel.Application();
            worksheet = new Excel.Worksheet();
            string sheetName;

            theWorkbook = ExcelObj.Workbooks.Open(txtImportFilePath.Text, 0, false, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", true, true, 0, true, 1, 0);
            sheets = theWorkbook.Worksheets;


        }
        catch (Exception ex)
        {
            MessageBox.Show("An error occured: " + ex.InnerException.ToString);
        }
        finally
        {
            worksheet = null;
            sheets = null;
            theWorkbook = null;
            ExcelObj.Quit();
            ExcelObj = null;
        }
Run Code Online (Sandbox Code Playgroud)

catch块本身导致程序崩溃并出现错误.实际错误发生在该行:theWorkbook = ExcelObj.Workbooks.Open(.....它尝试打开的文件已损坏或扩展名与错误不匹配.

但是当消息框尝试显示时,有一个对象引用未设置为实例错误.

这不是因为消息框.这是因为ex.InnerException.我尝试做了一些不同的事情,并在ex.InnerException行上抛出了错误:

Catch(Exception ex)
{
string err;
err = ex.InnerException; //Object reference not set to an instance.....
}
Run Code Online (Sandbox Code Playgroud)

我从未见过这种情况.那里有任何线索或建议吗?

谢谢!!!

Ree*_*sey 7

问题是Exception你收到的内容没有内部异常.

你应该检查一下:

catch (Exception ex)
{
    if (ex.InnerException != null)
        MessageBox.Show("An error occured: " + ex.InnerException.ToString());
    else
        MessageBox.Show("An error occured: " + ex.ToString());
}
Run Code Online (Sandbox Code Playgroud)