3 回答
TA贡献1788条经验 获得超4个赞
从MSDN,使用Statement(C#参考)
using语句确保即使在调用对象的方法时发生异常,也将调用Dispose。通过将对象放在try块中,然后在finally块中调用Dispose,可以达到相同的结果。实际上,这就是编译器翻译using语句的方式。前面的代码示例在编译时扩展为以下代码(请注意,额外的花括号可创建对象的有限作用域):
{
Font font1 = new Font("Arial", 10.0f);
try
{
byte charset = font1.GdiCharSet;
}
finally
{
if (font1 != null)
((IDisposable)font1).Dispose();
}
}
因此,基本上,这是相同的代码,但是具有很好的自动空检查和变量的额外作用域。该文档还指出,它“确保IDisposable对象的正确使用”,因此您将来也可能会为任何晦涩的情况获得更好的框架支持。
因此,选择选项2。
将变量包含在不再需要的范围内立即结束的作用域也是一个加号。
TA贡献1875条经验 获得超5个赞
考虑这两种解决方案都不好,因为它们掩盖了异常的可能性。
try没有a的A catch显然是个坏主意;请参阅MSDN,以了解该using声明为何同样危险。
另请注意,Microsoft现在建议使用ReaderWriterLockSlim而不是ReaderWriterLock。
最后,请注意,Microsoft示例使用两个try-catch块来避免这些问题,例如
try
{
try
{
//Reader-writer lock stuff
}
finally
{
//Release lock
}
}
catch(Exception ex)
{
//Do something with exception
}
一个简单,一致,干净的解决方案是一个不错的目标,但是假设您不能仅使用lock(this){return mydateetc;},您可能会重新考虑该方法。有了更多信息,我相信堆栈溢出可以提供帮助;-)
- 3 回答
- 0 关注
- 525 浏览
添加回答
举报