可能重复:
在C#中使用语句嵌套
我是usingC#声明的忠实粉丝.我发现这个:
using (var foo = new ObjectWhichMustBeDisposed())
{
other code
}
Run Code Online (Sandbox Code Playgroud)
......比这更具可读性:
var foo = new ObjectiWhichMustBeDisposed();
try
{
other code
}
finally
{
foo.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
它不仅更具可读性,而且还防止foo在using声明之后(即在声明之后)意外使用变量,而在第二个示例中foo可以在它被处置之后使用.
using但是,一个问题是,如果正在创建大量的一次性对象,它往往会导致非常嵌套的代码.例如:
using (var foo = new ObjectWhichMustBeDisposed())
{
using (var bar = new ObjectWhichMustBeDisposed())
{
other code
}
}
Run Code Online (Sandbox Code Playgroud)
如果两个对象的类型相同,那么您可以将它们组合成一个using语句,如下所示:
using (var foo = new ObjectWhichMustBeDisposed(),
bar = new ObjectWhichMustBeDisposed())
{
other code
}
Run Code Online (Sandbox Code Playgroud)
但是,如果对象的类型不同,那么这将不起作用.
我的问题是,是否可以达到类似的目的:
using (var foo = new ObjectWhichMustBeDisposed())
using (var bar = new OtherObjectWhichMustBeDisposed())
{
other code
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,第一次使用后没有花括号(因此不需要缩进代码).这个编译,我认为这就像一个if没有大括号的语句 - 即它将使用下一个语句(using在本例中为第二个)作为它的"主体".
是的,你建议的代码
using (var foo = new ObjectWhichMustBeDisposed())
using (var bar = new OtherObjectWhichMustBeDisposed())
{
other code
}
Run Code Online (Sandbox Code Playgroud)
既可以,也很常见.
每次使用后不需要使用额外的{} (除了包含其他代码的代码,如果其他代码不止一个语句),因为每个使用后面只有一个语句.
using (var foo = new ObjectWhichMustBeDisposed())
using (var bar = new OtherObjectWhichMustBeDisposed())
using (var baz = new OtherObjectWhichMustBeDisposed())
using (var quux = new OtherObjectWhichMustBeDisposed())
{
other code
}
Run Code Online (Sandbox Code Playgroud)
也没关系.
查看usingC#标准中的语句定义:
12.3.3.17 using 语句
对于以下形式的 using 语句 stmt:
using (资源获取)嵌入语句
嵌入语句是以下任意一项(参见条款 A2.5):
嵌入语句:
块
空语句
表达式语句
选择语句
迭代语句
跳转语句
try语句
检查语句
未检查语句
锁定语句
using语句
yield语句
因此,using从 C# 标准的角度来看,(block 或另一个 using 语句) 的两种用法是绝对等效的。
| 归档时间: |
|
| 查看次数: |
274 次 |
| 最近记录: |