我是C#中using
语句的忠实粉丝。我发现了这个:
using (var foo = new ObjectWhichMustBeDisposed())
{
other code
}
......比这更具可读性:
var foo = new ObjectiWhichMustBeDisposed();
try
{
other code
}
finally
{
foo.Dispose();
}
它不仅更具可读性,还可以防止在foo
语句之后(即在处置之后)意外使用using
变量,而在第二个示例中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
)as它的“身体”。
任何人都可以确认这是否正确? (description of the using statement没有帮助。)
答案 0 :(得分:7)
是您建议的代码
using (var foo = new ObjectWhichMustBeDisposed())
using (var bar = new OtherObjectWhichMustBeDisposed())
{
other code
}
既可以,也很常见。
每个使用之后不需要使用额外的{}(除了包含其他代码的,如果其他代码是不止一个语句)因为每个使用后面只有一个语句。
using (var foo = new ObjectWhichMustBeDisposed())
using (var bar = new OtherObjectWhichMustBeDisposed())
using (var baz = new OtherObjectWhichMustBeDisposed())
using (var quux = new OtherObjectWhichMustBeDisposed())
{
other code
}
也没关系。
答案 1 :(得分:2)
查看C#标准中的using
语句定义:
12.3.3.17使用陈述
对于形式的using语句stmt:
使用(资源获取)嵌入式语句
嵌入式语句是以下内容(参见条款A2.5):
嵌入语句:
块
空语句
表达式语句
选择语句
迭代语句
跳转语句
尝试语句
检查语句
未经检查的语句
锁定声明
使用语句
收益率陈述
因此,从{C#标准的角度来看,using
(块或其他使用语句)的两种用法都是绝对等效的。
答案 2 :(得分:1)
是的,这是正确的。
using (var foo = new ObjectWhichMustBeDisposed())
using (var bar = new OtherObjectWhichMustBeDisposed())
{
other code
}
所以其余的由你决定。如果您喜欢这种编码方式,请使用它。
答案 3 :(得分:1)
是的,这是正确的;但是对你来说这可能不是一个好的编码风格。
关于此问题,我们就此进行了长时间的讨论:Why is it considered a bad practice to omit curly braces?在OP的帖子中,OP特别提到了使用陈述。这可能值得一读。