C# 像这样用‘using’可以吗?
可能重复:C# 像这样用‘using’可以吗?,c#,C#,可能重复: 我非常喜欢在C#中使用语句。我发现: using (var foo = new ObjectWhichMustBeDisposed()) { other code } …比这更具可读性: var foo = new ObjectiWhichMustBeDisposed(); try { other code } finally { foo.Dispose(); } 它不仅更具可读性,还可以防止在using语句之后(即,在它被释放之后)意外使用foo变量
我非常喜欢在C#中使用
语句。我发现:
using (var foo = new ObjectWhichMustBeDisposed())
{
other code
}
…比这更具可读性:
var foo = new ObjectiWhichMustBeDisposed();
try
{
other code
}
finally
{
foo.Dispose();
}
它不仅更具可读性,还可以防止在using
语句之后(即,在它被释放之后)意外使用foo
变量,而在第二个示例中,可以在它被释放之后使用foo
但是,使用
的一个问题是,如果创建了大量的一次性对象,它往往会导致非常嵌套的代码。例如:
using (var foo = new ObjectWhichMustBeDisposed())
{
using (var bar = new ObjectWhichMustBeDisposed())
{
other code
}
}
如果两个对象的类型相同,则可以使用语句将它们组合成一个,如下所示:
using (var foo = new ObjectWhichMustBeDisposed(),
bar = new ObjectWhichMustBeDisposed())
{
other code
}
但是,如果对象不属于同一类型,则这将不起作用
我的问题是,是否可以达到类似的目的:
using (var foo = new ObjectWhichMustBeDisposed())
using (var bar = new OtherObjectWhichMustBeDisposed())
{
other code
}
在这种情况下,第一次使用后没有大括号(因此不需要缩进代码)。这是编译的,我假设它就像一个没有大括号的if
语句一样工作——也就是说,它将使用下一个语句(在本例中使用的第二个语句)作为它的“主体”
有人能证实这是否正确吗?(没有帮助)。是您建议的代码
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
}
也可以。是的,这是正确的
using (var foo = new ObjectWhichMustBeDisposed())
using (var bar = new OtherObjectWhichMustBeDisposed())
{
other code
}
剩下的就看你了。如果你喜欢这种编码方式,就用它吧。是的,它是正确的;然而,它可能不是一个好的编码风格为您
关于这一点,有一个很长的讨论:在文章中,OP特别提到使用语句。也许值得一读 使用C#标准中的
语句定义查看:
12.3.3.17使用声明
对于以下形式的using语句stmt:
使用(资源获取)嵌入式语句
嵌入式语句为以下内容中的任意内容(见第A2.5项):
嵌入语句:
块
空语句
表达式语句
选择语句
迭代语句
跳转语句
try语句
核对对账单
未选中语句
锁定语句
使用语句
收益表
因此,从C#Standard的角度来看,使用
(block或另一个using语句)的两种用法是绝对等效的。它当然有效。如果你和你的编码风格之间没有问题的话。是的,它是完全正确的:)它编译得很好。我唯一想说的是,为了可读性和一致性,请坚持在{}
周围包装代码块的风格。对不起,我实际上没有答案,我只是想说,我喜欢后一种方法,并经常使用它来减少嵌套,特别是在使用sql命令/连接时etc@hoang我认为对未来读者来说,省略花括号比较好。它使代码更容易阅读,而不是更难,并且是一种足够常见的模式,不应该太令人惊讶。对于任何结构化语句,如if
、while
等,这也是如此。@OlivierJacot Descombes除了try
/catch
之外。感谢所有回应的人,很抱歉我不能接受你们所有人,但我认为最好接受这个答案——这是确定的/有证据支持的。