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() 方法吗?
如果我在所有方法中使用它,它是否会对性能产生影响?
这是一个解释问题的虚构示例.
如果您使用您建议的修改后的代码块发布答案,对我来说会更有用.
谢谢.
我真的需要尝试..抓住每种方法吗?
实际上,它通过切断堆栈跟踪来损害您的诊断 - 您将无法看到原始的完整堆栈跟踪.你可以通过使用:
throw;
Run Code Online (Sandbox Code Playgroud)
代替
throw Ex;
Run Code Online (Sandbox Code Playgroud)
...但基本上try/catch块只是在这里添加了一些东西.摆脱它们.
如果我在所有方法中使用它,它是否会对性能产生影响?
只有抛出异常 - 但是每次重新计算堆栈跟踪时,它可能会使速度变慢.我不担心性能 - 首先担心代码的可读性(以及对堆栈跟踪的影响).