Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 像这样用‘using’可以吗?_C# - Fatal编程技术网

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
之外。感谢所有回应的人,很抱歉我不能接受你们所有人,但我认为最好接受这个答案——这是确定的/有证据支持的。