【发布时间】:2022-01-20 10:13:03
【问题描述】:
我有以下代码,但我不确定退出Execute() 方法的正确模式是什么。
代码可以运行,但是Execute() 方法太大。
public void Execute()
{
// load datatable from excel
DataTable data = new();
try
{
data = ExcelReader.ToDataTable(_meta.FullPath, new() { SheetName = _sheetName });
}
// these errors are fine, but the dataset is not relevant and we want exit the execution
catch (ArgumentOutOfRangeException e)
{
if (e.Message.Contains("HeaderRowIndex")) return;
}
catch (ArgumentNullException e)
{
if (e.Message.Contains("Parameter 'sheet'")) return;
}
// execute logic on dataset
// ..
}
我想将代码的load data 部分移动到像这样的单独方法中,但是我不知道如何结束执行。
public void Execute()
{
// load data
DataTable data = new();
LoadData();
// execute logic on dataset
// ...
}
private DataTable LoadData()
{
try
{
data = ExcelReader.ToDataTable(_meta.FullPath, new() { SheetName = _sheetName });
}
// these errors are fine, but the dataset is not relevant and we want exit the execution => but how?
catch (ArgumentOutOfRangeException e)
{
if (e.Message.Contains("HeaderRowIndex")) return; // will return to Execute() method, but not exit it.
}
catch (ArgumentNullException e)
{
if (e.Message.Contains("Parameter 'sheet'")) return; // will return to Execute() method, but not exit it.
}
}
我认为这是一个很常见的问题,那么处理此要求的推荐方法是什么?我是否应该从LoadData 方法创建一些返回对象,例如
class LoadDataResult
{
public DataTable data {get; set};
public bool IsRelevant {get; set};
}
dataResult = LoadData()
if (!dataResult.IsRelevant) return;
或者它是一种矫枉过正且更简单的解决方案(不使用这些结果对象填充程序)?
【问题讨论】:
-
DataTable data = LoadData(); .... do the stuff...?我不清楚问题是什么。当没有更多语句要运行或return被命中时,执行将结束。 -
为什么不简单地从 LoadData 返回
nullDataTable? -
如果您声明 private DataTable LoadData() 那么您应该返回一个 DataTable 或 null。然后很容易在Execute方法上检查返回值,如果为null则退出
-
private Tuple
LoadData(){}如果要完成在元组的Item1和Item2中的数据 -
没有这些结果对象,你可以再创建一个Execute方法,像套娃一样放在LoadData的末尾