【发布时间】:2013-01-15 20:31:00
【问题描述】:
我非常喜欢 C# 中的 using 语句。我发现这个:
using (var foo = new ObjectWhichMustBeDisposed())
{
other code
}
...比这更具可读性:
var foo = new ObjectiWhichMustBeDisposed();
try
{
other code
}
finally
{
foo.Dispose();
}
它不仅更具可读性,还可以防止在using 语句之后(即在它被释放之后)意外使用foo 变量,而在第二个示例中,foo 可以在它之后使用被处理掉了。
不过,using 的一个问题是,如果要创建大量一次性对象,它往往会导致代码非常嵌套。例如:
using (var foo = new ObjectWhichMustBeDisposed())
{
using (var bar = new ObjectWhichMustBeDisposed())
{
other code
}
}
如果两个对象属于同一类型,那么您可以将它们组合成一个 using 语句,如下所示:
using (var foo = new ObjectWhichMustBeDisposed(),
bar = new ObjectWhichMustBeDisposed())
{
other code
}
但是,如果对象不是同一类型,那么这将不起作用。
我的问题是是否可以达到这样的类似目的:
using (var foo = new ObjectWhichMustBeDisposed())
using (var bar = new OtherObjectWhichMustBeDisposed())
{
other code
}
在这种情况下,第一次使用后没有大括号(因此无需缩进代码)。这可以编译,我假设这就像没有大括号的 if 语句一样工作 - 即它将使用下一个语句(在本例中为第二个 using)作为它的“主体” .
谁能确认这是否正确? (description of the using statement 没有帮助)。
【问题讨论】:
-
它确实有效。如果没问题,就在你和你的编码风格之间。
-
是的,完全正确:)
-
它编译得很好我唯一要说的是,为了可读性和一致性,坚持使用围绕
{ }包装代码块的风格 -
对不起,我实际上没有答案,只是想说我喜欢后一种方法并经常使用它来减少嵌套,尤其是在使用 sql 命令/连接等时跨度>
-
@hoang 我认为对未来的读者省略花括号更友好。它使代码更容易阅读,而不是更难,并且是一种足够常见的模式,应该不会太令人惊讶。
标签: c#