处理异常、错误和返回值的问题
本文关键字:返回值 问题 错误 异常 处理 | 更新日期: 2023-09-27 18:04:05
我需要你的建议。我的源程序变得非常…扩大。我在处理错误,异常等方面有一点问题。
例如,我有"DatabaseProvider"类,其中有与db联系的方法。我必须处理标准异常,无效的数据形式数据库(例如错误的电子邮件格式),从数据库返回的错误。所有这些东西都需要返回给调用DatabaseProvider方法的函数,那个方法会记录这个异常或错误,并且还能工作。所以我不能抛出异常。
如果这还不够,在大多数情况下,我必须返回(从DatabaseProvider)一个值或对象或对象列表。
所以我想,也许可以创建一个类"Response"。这个类的对象会从我的应用程序中的每个方法中返回。
如:public class Response { public bool Error { get; set; } public string ErrorMessage { get; set; } public bool DatabaseError { get; set; } public string DatabaseMessage { get; set; } public Exception ex { get; set; } }
但是如何返回(例如)一个列表的自我设计对象在同一时间?
使用"out"参数是解决方案?什么是最好的方法(最佳实践)?我正在搜索,但我发现的是如何处理异常(只有).
我将实现一个自定义异常,其中包含在异常情况下需要传递的所有数据。就像
public class MySpecificException: Exception
{
public bool Error { get; set; }
public string ErrorMessage { get; set; }
public bool DatabaseError { get; set; }
public string DatabaseMessage { get; set; }
public Exception ex { get; set; }
}
抛出异常,并在调用函数中为特定的异常使用try catch块。
public void CallingFunction()
{
try {
//call your function
}
catch (MySpecificException ex)
{
//log the data from the exception
}
这正是自定义异常的作用。
这样,你仍然可以从函数返回你想要返回的东西(一个列表或其他)。
我建议实现一个可以抛出和捕获的自定义Exception,而不是返回此信息,因为它似乎非常特定于错误。
然而,如果你总是想在返回的结果中附加特定的元信息,你可以实现一个小的vehicle类来包装结果,同时携带元信息:
abstract class ResultWrapper
{
//meta info, such as error references/properties/flags/statistics
public ResultWrapper([meta info])
{
//set meta info
}
}
class ResultList<T> : ResultWrapper
{
public readonly List<T> resultList;
//constructor for resultList, plus meta information for parent
public ResultList(List<T> resultList, [additional args for meta info]) : base([meta info])
{
this.resultList = resultList;
}
}
class SingleResult<T> : ResultWrapper
{
public readonly T result;
//constructor similar to above
}
Edit:根据你的评论,你绝对应该使用你可以抛出的自定义异常(可能的包装导致异常)。正如Petar所说,这些可以在循环中捕获并在那里处理,而不会停止后续任务的执行。语言支持异常处理是有充分理由的——我会利用它。
还有,在你的模式中:
public bool Error { get; set; }
public string ErrorMessage { get; set; }
不需要bool
。检查错误信息/引用字段