如果您在 using 语句 中从构造函数调用对象,则该对象会自动被包装在 try/catch 块中进行处理。这是构造函数中的对象初始化块。
但是,如果在同一语句中初始化成员类型,会发生什么?例如:
但是,如果在同一语句中初始化成员类型,会发生什么?例如:
class TypeThatThrowsAnException
{
public TypeThatThrowsAnException()
{
throw new Exception();
}
}
using (SomeDisposable ds = new SomeDisposable() {
MemberThatThrowsAnException m = new TypeThatThrowsAnException()
})
{
// inside using statement
ds.doSomething();
}
MemberThatThrowsAnException
在初始化SomeDisposable
时抛出异常时会发生什么,即执行代码块时会发生什么?
如果我们在using
块的范围之外调用这些成员构造函数,是否会有任何区别?
class TypeThatThrowsAnException
{
public TypeThatThrowsAnException()
{
throw new Exception();
}
}
class SomeClass
{
public static TypeThatThrowsAnException StaticMember
{
get
{
return new TypeThatThrowsAnException();
}
}
}
using (SomeDisposable ds = new SomeDisposable() {
MemberThatThrowsAnException = SomeClass.StaticMember
})
{
// inside using statement
ds.doSomething();
}
在某些情况下,这种写法可能很好并且易读,但我想知道是否存在任何警告或陷阱。或者这完全是行不通的。此外,您需要考虑可读性。
m
),这并没有帮助。当前发布的代码无法编译。 - Jon Skeet