expressions in C#'s using statement

本文关键字:using statement in expressions | 更新日期: 2023-09-27 18:25:27

C#参考手册使用语句将的语法定义为:

using-statement:
   using   (    resource-acquisition   )    embedded-statement
resource-acquisition:
   local-variable-declaration
   expression

有人能为我提供一个使用语句在中使用表达式的例子吗。常规示例使用变量声明。

expressions in C#'s using statement

使用表达式的示例如下:

var stream = new MemoryStream();
using(stream)
{
    //Perform operations with stream here.
}
//Stream is now disposed.

这里,stream变量在using之外声明,但由using包装。完成后,它将处理stream变量。

这不是一种很常见的模式,但对于在资源被处理后可能需要对其执行其他操作的情况,它很有用。

这可以与方法调用等一起使用。本质上,任何计算为IDisposable类型的表达式都可以使用。一般来说,不能访问using语句中的IDisposable并没有那么有用。

我见过它以这种方式使用的唯一场景是在ASP.NET MVC中,使用诸如.之类的表单助手

@using(Html.BeginForm())
{
    @Html.TextBox("Name");
}

一个例子:

//Create the file. 
using (FileStream fs = File.Create(path))
{
    AddText(fs, "This is some text");
    AddText(fs, "This is some more text,");
    AddText(fs, "'r'nand this is on a new line");
    AddText(fs, "'r'n'r'nThe following is a subset of characters:'r'n");
    for (int i=1;i < 120;i++)
    {
        AddText(fs, Convert.ToChar(i).ToString());
    }
}

说明:

提供一种方便的语法,可确保正确使用IDisposable对象。

using语句对块的和处的对象调用Dispose方法。

即使抛出异常,它也会调用Dispose方法。

要看的关键实际上是第8.5.1节中local-variable-declaration的定义

局部变量声明声明一个或更多的局部变量。 局部变量声明:
局部变量类型局部变量声明符 局部变量类型:
type
var 局部变量声明符:
局部变量声明符
局部变量声明器,局部变量声明程序 局部变量声明符:
标识符
identifier=局部变量初始值设定项 局部变量初始化器:
表达式
数组初始化器

因此一个local-variable-declaration可以表示为type identifer = expression。因此,using的规范告诉你的是,你可以用var variableName = xxxxxxx的形式声明一个变量,也可以只使用xxxxxx部分。

这里没有提到的expression的另一个例子是:

IDisposable disposable;
using (disposable = new SomeDisposableObject()) {
   // do something
}

IDisposable disposable;
using (disposable = SomeExpressionOrFunctionThatEvaluatesToADisposable()) {
   // do something
}

引用不必是IDisposable类型,它可以是实现它的任何类型。