C# .NET Epplus - 查找具有特定名称的 excel sheets,处理未找到此类 sheet 的最佳方法

C# .NET Epplus - finding excel sheets with a specific name, best way to handle no such sheet found

我有一个方法可以查找具有特定名称的工作表,returns 这个工作表对象 (Epplus):

private static ExcelWorksheet findExcelSheet(ExcelPackage dpcExcel, string v)
        {
            foreach (var sheet in dpcExcel.Workbook.Worksheets)
            {
                // if we found a matching sheet
                if ((sheet.Name).CompareTo(v)==0)
                {
                    return sheet;
                }
            }

            return null;
        }

上述方法在其他方法中被调用,作为全有或全无过程的一部分。假定正在处理的电子表格具有一组特定的工作表,并且将存在具有特定名称的工作表。

我的问题是:如果我要使用上述方法,我是否应该在调用该方法的地方使用 try-catch 块?或者,在这种情况下是否有更好的方法来实现上述内容?

此方法中有几种情况,其中对象或 属性 可以 return null。在这种情况下,它将抛出一个空异常。此方法的调用者可以有一个 try 和 catch 块来捕获特定异常(即 ArgumentNullException e)或一般异常(Exception e)。您可以定义自己的自定义异常,让调用者捕获它们并根据特定异常执行不同的行为。或者你可以在这个方法中尝试并捕获,如果有异常则 return null。这是执行此操作的三种不同方法。

public class Program
{
    public static void Main(string[] args)
    {
        ExcelPackage dpcExcel = new ExcelPackage();
        var searchWord = "myExcel";

        //Method 1
        //Will contain an ExcelWorkSheet or null
        var sheet = FindExcelSheetV1(dpcExcel, searchWord);

        //Method 2
        //Will contain an ExcelWorkSheet or we need to handle the exception
        var sheet2 = new ExcelWorksheet();
        try
        {
            sheet2 = FindExcelSheetV2(dpcExcel, searchWord);
        }
        catch (ArgumentNullException e)
        {
            //Do something specific
            Console.WriteLine(e.Message);
            throw;
        }
        catch (Exception e)
        {
            //Do something generic
            Console.WriteLine(e.Message);
            throw;
        }

        //Method 3
        //Will contain an ExcelWorkSheet or null
        var sheet3 = dpcExcel.FindExcelSheetV3(searchWord);
    }

    //Will return null if not found, or if any object or property is null
    private static ExcelWorksheet FindExcelSheetV1(ExcelPackage dpcExcel, string v)
    {
        try
        {
            var sheet = dpcExcel.Workbook.Worksheets.FirstOrDefault(w => w.Name.Equals(v));
            return sheet;
        }
        catch
        {
            return null;
        }
    }

    //This will throw an ArgumentNullException if any object or property is null
    private static ExcelWorksheet FindExcelSheetV2(ExcelPackage dpcExcel, string v)
    {
        var sheet = dpcExcel.Workbook.Worksheets.FirstOrDefault(w => w.Name.Equals(v));
        return sheet;

    }

}

public static class ExcelPackageExtensions
{
    // Like FindExcelSheetV1, but in an extension method. 
    public static ExcelWorksheet FindExcelSheetV3(this ExcelPackage dpcExcel, string v)
    {
        try
        {
            var sheet = dpcExcel.Workbook.Worksheets.FirstOrDefault(w => w.Name.Equals(v));
            return sheet;
        }
        catch
        {
            return null;
        }
    }
}