c# - 在哪里实现 try catch block ?

标签 c# error-handling

我总是在纠结在哪里放置 try catch block 。例如,我有一个数据库类,其方法接受两个参数。 FindObject(字符串在哪里,字符串顺序)。此方法使用指定的 where 和 order 字符串执行 sql 查询。

在一个类中,我有一个名为 IsUsed 的属性,该属性如下所示:

public bool IsUsed 
{  
 get
 {   
  ClassA a = new ClassA();   
  Collection<ClassA> myCollection = a.FindObject("Id = 1","");

  if(..) // etc  
 } 
}

不管这种做法巧妙与否,我只想知道如果sql查询执行出错,try catch应该放在哪里。

我应该将 try catch 放在哪里,以便通知用户出现错误?

  1. 在 FindObject 方法中?
  2. 在 IsUsed 属性中?
  3. 我在哪里调用 IsUsed 属性?
  4. 其他地方?但是在哪里

最佳答案

我尝试遵循一个相当简单的规则:我设置一个 try..catch block 如果我能以合理的方式处理异常。如果我无法对异常做任何有意义的事情,我会让它冒泡到调用代码。

作为旁注,我会避免在属性 getter 中执行(可能很长的)数据库调用。我通常尝试让属性只是设置或从支持字段中获取值,让其他方法执行数据库查找等。这将使代码对于编写调用代码的人来说更可预测(属性访问通常是一种廉价操作,而方法调用通常可能更昂贵)。

关于c# - 在哪里实现 try catch block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3624914/

相关文章:

c# - 非托管/托管互操作 - 传递 int[] 时遇到问题

c# - 如何在 C# 中等待 WebBrowser 控件

C# LanguageExt - 将多个异步调用组合成一个分组调用

asp.net - 非 aspx 页面的 404 重定向

java - 尝试运行程序时仅在控制台中显示奇怪的错误

c# - 如何显示来自非 GUI 相关类的 GUI 应用程序的错误消息?

php - 如何在 PHP 中记录 fatal error ?

c# - WPF Dispatcher 的 InvokeAsync 和 BeginInvoke 有什么区别

c# - 如何更改 Xamarin.Forms 中标签的字体系列?

c# - 有时使用单个 try catch 而不是大量的 TryParsing 和其他错误处理不是更好吗?