TrN*_*TrN 8 c# exception-handling exception
这个案子从早上起就困扰着我.如果抛出异常,在类构造函数中调用垃圾收集器是一种好习惯吗?我有这样的事情:
public MyClass(/* some arguments */)
{
try
{
//do stuff...
} catch(Exception e) {
//do stuff, save logfile
GC.SuppressFinalize(this);
}
}
Run Code Online (Sandbox Code Playgroud)
我这样做的原因是,如果它抛出异常(通常是NullreferenceException)我想在文本文件中记录它,我不再需要/想要这个对象了.但这是好习惯吗?如果没有怎么做呢?
Jon*_*eet 17
你的代码不会调用垃圾收集器 - 它只会抑制终结器,这只有在你的类有终结器时才很重要,这是不太可能的.
记录异常是公平的,但是目前你只是捕获它,这意味着构造函数将返回没有错误.这几乎肯定不是一个好主意.我建议你可能想要:
try
{
//do stuff...
} catch(Exception e) {
//do stuff, save logfile
throw;
}
Run Code Online (Sandbox Code Playgroud)
话虽如此,我通常会尝试集中处理异常处理,将其放在调用堆栈上并将所有日志记录放在那里.将日志记录放在构造函数IMO中是非常罕见的.
除非您this
在构造函数中发布了引用,否则新创建的对象无论如何都有资格进行垃圾回收 - 您无需执行任何其他操作.如果你IDisposable
在你的类中实现,你应该小心释放你在构造函数中已经需要的任何资源,但在大多数情况下,你可以让异常冒泡.
归档时间: |
|
查看次数: |
3932 次 |
最近记录: |