c# - 类库与其他项目的异常处理技巧

标签 c# exception

我对在方法层次结构中处理异常有点困惑。

比方说,我在类库项目中有一个类 Logger。请查看以下代码-

namespace MyLibrary
{
    public class Logger
    {
        //exposed to other project
        public static void CreateLog(String message)
        {
            try
            {
                WriteInFile(message); //calling the method below
            }
            catch (Exception Ex)
            {
                throw Ex;              
            }
        }

        //private method
        private static void WriteInFile(String message)
        {
            try
            {
                //Writing in a file
            }
            catch (Exception Ex)
            {
                throw Ex;
            }
        }
    }
}

假设我在 ASP.NET MVC 项目中使用该库。代码-

namespace MvcProject.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult DoSomething()
        {
            try
            {
                Logger.CreateLog("some text.");
            }
            catch (Exception Ex)
            {
                 //Exception is handled here.
            }

            return View();
        }
    }
}

层次结构:DoSomething() -> CreateLog() -> WriteInFile()

所有这三个方法都有 try.. catch.. block 。我的问题是-

  • 我真的需要在 CreateLog()WriteInFile() 方法中使用 try..catch 吗?

  • 如果我在 所有方法,对性能有影响吗?

这是一个虚构的例子来解释问题。

It would be more useful for me if you post an answer with a revised code block that you suggest.

谢谢。

最佳答案

Do I actually need try.. catch in every method?

没有。事实上,它通过切断堆栈跟踪来损害您的诊断 - 您将无法看到原始的完整堆栈跟踪。你可以通过使用来解决这个问题:

throw;

代替

throw Ex;

...但基本上 try/catch block 只是在这里添加了多余的东西。摆脱它们。

If I use that in all the methods, does it have any performance impact?

仅当抛出异常时 - 但每次重新计算堆栈跟踪可能会使其变慢。不过,我不会担心性能 - 首先要担心代码的可读性(以及对堆栈跟踪的影响)。

关于c# - 类库与其他项目的异常处理技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29230063/

相关文章:

java - 在java中的单个语句中抛出用户定义的异常

c# - WCF 部署到 Azure Entity Framework 方法返回异常

c# - VR 添加运动 : Walk

php - 在关闭函数中捕获异常

c++ - VC++ 异常处理 - 应用程序无论如何都会崩溃

java - 保存 .txt 文件时出现错误或异常 (Java)

c# - 获取对其构造函数抛出异常的实例的引用

c# - 如何使用System.Text.Json将json数组转换为集合;

c# - 如何在 WPF 中设置复选框的初始状态(在 XAML 或代码中)?

c# - 使用 async/await 调用 WCF 服务的模式