类库与其他项目之间的异常处理技术

s.k*_*aul 2 c# exception-handling

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

比方说,我是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;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我们假设,我在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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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

所有这三种方法都有try.. catch..块.我的问题是 -

  • 我真的需要try.. catchin CreateLog()WriteInFile() 方法吗?

  • 如果我在所有方法中使用它,它是否会对性能产生影响?

这是一个解释问题的虚构示例.

如果您使用您建议的修改后的代码块发布答案,对我来说会更有用.

谢谢.

Jon*_*eet 6

我真的需要尝试..抓住每种方法吗?

实际上,它通过切断堆栈跟踪来损害您的诊断 - 您将无法看到原始的完整堆栈跟踪.你可以通过使用:

throw;
Run Code Online (Sandbox Code Playgroud)

代替

throw Ex;
Run Code Online (Sandbox Code Playgroud)

...但基本上try/catch块只是在这里添加了一些东西.摆脱它们.

如果我在所有方法中使用它,它是否会对性能产生影响?

只有抛出异常 - 但是每次重新计算堆栈跟踪时,它可能会使速度变慢.我不担心性能 - 首先担心代码的可读性(以及对堆栈跟踪的影响).