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
有人能为我提供一个使用语句在中使用表达式的例子吗。常规示例使用变量声明。
使用表达式的示例如下:
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
类型,它可以是实现它的任何类型。