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

标签 c# .net exception null

我有以下方法可以打开 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;
    }

如您所见,我返回 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,因为在没有工作簿的地方返回 null 似乎意味着完整,因为 null 表示没有对象,但是从第二个方法空列表将是一个连击选项,因为我们在使用它之前使用 Count 而不是 null或遍历列表等。这也符合约定,例如 ToList 将返回零元素列表而不是返回 null。

Return null to avoid unknown exceptions from a method in C#

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

关于c# - 返回 null 以避免 C# 中的方法出现未知异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38711953/

相关文章:

c# - 在razor View中设置分页页面大小DropDownList

c# - Windows Phone 7 复制和粘贴支持?

c++ - 按值捕获异常的参数时,调用析构函数的顺序是什么?

异常中的Python字符串转换为元组

c++ - 抛出 C++0x 异常的代价

c# - 简单的喷射器将具体类型与生活方式结合起来

c# - MongoDB C# 聚合计数

.net - TeamCity MSBuild Gallio NCover 报告

c# - 如何在 try and catch 中继续 foreach?

可移植联系人 API 的 .NET 实现