返回null以避免C#中的方法出现未知异常

本文关键字:方法 未知 异常 null 返回 | 更新日期: 2023-09-27 17:59:30

我有下面的方法,它打开Excel工作簿并返回它以在另一个方法中使用。

private Excel.Workbook openWorkbook()
    {
        // Get excel file path returns the file path of the excel workbook if it exists, otherwise returns null.
        List<string> filePaths = getExcelFilePath();
        if (filePaths != null)
        {
            return excel.Workbooks.Open(filePaths[0]);
        }
        return null;
    }

正如您所看到的,当我从另一个方法调用非exixtent工作簿时,我返回null是为了避免try-catch。这样做不好吗。我在下面的方法中做了类似的事情,应该返回一个列表:

private List<string> getSOsToDelete()
    {
        // rawData is private variable in the class. If the workbook was not open this worksheet is set to null in another method similar to openWorkbook() above.
        if (rawData != null)
        {
            List<string> ToDeleteSOs = new List<string>();
            for (int i = rawData.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing).Row; i > 1; i--)
            {
                if (rawData.Cells[i, 7].Value2.ToString() != "B2B" || rawData.Cells[i, 7].Value2.ToString() != "" || rawData.Cells[i, 8].Value2.ToString() != "Trns-Inc" || rawData.Cells[i, 8].Value2.ToString() != "")
                {
                    string SONumber = rawData.Cells[i, 3].Value2.ToString();
                    ToDeleteSOs.Add(SONumber);
                }
            }
            return ToDeleteSOs;
        }
        return null;
    }

如果不是这样,那么写这样的方法的最佳方式是什么?对于第2部分,我想我可以返回一个空列表并检查长度。我不确定哪个更好。然而,对于第一个方法,如果文件不存在,我真的不确定该返回什么。

返回null以避免C#中的方法出现未知异常

我认为对此没有硬性规定。但我会从第一个方法中返回null,因为在没有工作簿的地方返回null似乎意味着满,因为null表示没有对象,但从第二个方法中,空列表将是一个糟糕的选项,就像我们在使用Count之前使用它而不是null或迭代列表等一样。这也符合ToList将返回零元素列表而不是返回null的约定。

返回null以避免C#中方法出现未知异常

可能有不同的方法来告诉调用方方法被调用的方法中发生了错误,而异常就是其中之一,并且被广泛采用。您可以对该方法进行文档记录,以判断该方法何时会出现异常。让我们看看String.Substring方法(Int32,Int32)。文档中提到,当startIndex加上length表示位置不在此实例中,或者startIndex或length小于零时,此方法可以通过ArgumentOutOfRangeException,MSDN