我有以下方法打开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部分,我想我可以返回一个空列表并检查长度。我不确定哪个更好。但是,对于第一种方法,如果文件不存在,我真的不确定要返回什么。
答案 0 :(得分:1)
我认为没有硬性规定。但我会从第一个方法返回null作为返回null,其中没有工作簿似乎意味着完整,因为null表示没有对象但是从第二个方法空列表将是一个batter选项,因为我们在使用它之前使用Count而不是null或迭代列表等。这也符合惯例,如ToList
将返回零元素列表而不是返回null。
返回null以避免来自C#
中方法的未知异常
可能有不同的方式告诉调用方法在调用方法中发生错误,异常是其中之一并被广泛采用。您可以记录方法,以告知该方法何时出现异常。让我们看一下MSDN上String.Substring Method (Int32, Int32)的文档。该文档提到此方法可以通过ArgumentOutOfRangeException当 startIndex加上length指示不在此实例中的位置,或者startIndex或length小于零时,MSDN