我在类中有一个执行多个任务的方法(调用其他方法等)。整个过程可能会出现一些错误或问题,但这并不意味着该过程被中止。我希望在方法完成后,它会向调用者返回所有这些问题的列表,以便他可以决定如何处理它们。
实现这个的最佳方法是什么?
我想到的第一件事是让方法返回某种错误类的List,但我可能需要用它返回其他东西,这样就会出问题。另外,抛出异常并不好,因为这会阻止流程,我需要一路上收集错误,而不是停止执行并返回调用者。
我也在考虑提出调用者听到的某种事件,但这意味着有几个事件(对于每个错误),我只想让它发生一次。
想法?
答案 0 :(得分:1)
一些方法
Tuple<RealResult, ErrorsList>
,以便调用者可以检查结果和错误列表。答案 1 :(得分:1)
我的第一个想法是创建一个可以作为这些错误的累加器的类,例如
class ProcessingErrors
{
public void ReportError(...) { store the errror};
}
您将作为参数传递:
MyResult DoProcessing(RealArgs a, ProcessingErrors e)
{
....
if(error) e.ReportError(...);
...
return result;
}
答案 2 :(得分:0)
为此过程中的错误收集创建一个委托。将其传递给所有正在使用的类,并让他们在此过程中报告错误。让调用类收集并处理错误,或为其创建一个单独的类。如下所示:
public delegate void ErrorCollector(string errorDescription);
public class MainControl
{
public void Execute()
{
new DoA(CollectErrors).DoStuff();
new DoB(CollectErrors).DoStuff();
//Display Errors encountered during processing in DoA and DoB
foreach (string s in _errorList)
{
Console.WriteLine(s);
}
}
public IList<string> ErrorList
{ get {return _errorList;} }
private void CollectErrors(string errorDescription)
{
_errorList.Add(errorDescription);
}
private readonly IList<string> _errorList = new List<string>();
}
public class DoA
{
private readonly ErrorCollector _errorCollector;
public DoA(ErrorCollector errorCollector)
{
_errorCollector = errorCollector;
}
public void DoStuff()
{
//Do something
//Perhaps error occurs:
_errorCollector("ERROR IN DoA!!!");
}
}
public class DoB
{
private readonly ErrorCollector _errorCollector;
public DoB(ErrorCollector errorCollector)
{
_errorCollector = errorCollector;
}
public void DoStuff()
{
//Do something
//Perhaps error occurs:
_errorCollector("ERROR IN DoB!!!");
}
}