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;
}
}
}
我有一个方法可以查找具有特定名称的工作表,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;
}
}
}