C#'中的表达式;s using语句

C#'中的表达式;s using语句,c#,expression,using-statement,C#,Expression,Using Statement,C#参考手册将使用语句的语法定义为: using-statement: using ( resource-acquisition ) embedded-statement resource-acquisition: local-variable-declaration expression 有人能给我举个例子,在using语句中使用一个表达式吗。 常规示例使用变量声明。示例: //Create the file. using (FileStream f

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

using-statement:
   using   (    resource-acquisition   )    embedded-statement

resource-acquisition:
   local-variable-declaration
   expression
有人能给我举个例子,在using语句中使用一个表达式吗。 常规示例使用变量声明。

示例:

//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());

    }
}
//创建文件。
使用(FileStream fs=File.Create(path))
{
AddText(fs,“这是一些文本”);
AddText(fs,“这是更多的文本”);
AddText(fs,“\r\n这是一个新行”);
AddText(fs,“\r\n\r\n以下是字符的子集:\r\n”);
对于(int i=1;i<120;i++)
{
AddText(fs,Convert.ToChar(i.ToString());
}
}
说明:

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

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

即使引发异常,它也将调用Dispose方法。

示例:

//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());

    }
}
//创建文件。
使用(FileStream fs=File.Create(path))
{
AddText(fs,“这是一些文本”);
AddText(fs,“这是更多的文本”);
AddText(fs,“\r\n这是一个新行”);
AddText(fs,“\r\n\r\n以下是字符的子集:\r\n”);
对于(int i=1;i<120;i++)
{
AddText(fs,Convert.ToChar(i.ToString());
}
}
说明:

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

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


即使引发异常,它也将调用Dispose方法。

使用表达式的示例如下:

var stream = new MemoryStream();

using(stream)
{
    //Perform operations with stream here.
}

//Stream is now disposed.
这里,
变量在using外部声明,但由using包装。完成后,它将处理
变量

这不是一种非常常见的模式,但它对于您可能需要在资源被处置后对其执行其他操作的位置非常有用

这可以用于方法调用等。基本上,任何计算结果为
IDisposable
类型的表达式都可以使用。一般来说,在using语句中没有对
IDisposable
的访问权并没有多大用处

我见过的唯一一个以这种方式使用它的场景是在ASP.NETMVC中,它使用了表单帮助程序,如

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

使用表达式的示例如下所示:

var stream = new MemoryStream();

using(stream)
{
    //Perform operations with stream here.
}

//Stream is now disposed.
这里,
变量在using外部声明,但由using包装。完成后,它将处理
变量

这不是一种非常常见的模式,但它对于您可能需要在资源被处置后对其执行其他操作的位置非常有用

这可以用于方法调用等。基本上,任何计算结果为
IDisposable
类型的表达式都可以使用。一般来说,在using语句中没有对
IDisposable
的访问权并没有多大用处

我见过的唯一一个以这种方式使用它的场景是在ASP.NETMVC中,它使用了表单帮助程序,如

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

实际上,要看的关键是第8.5.1节中的
局部变量声明的定义

局部变量声明声明一个或多个 更多的局部变量

局部变量声明:
局部变量类型 局部变量声明器

局部变量类型:
类型
变量

局部变量声明器:
局部变量声明器
局部变量声明器,局部变量声明器

局部变量声明符:
标识符
标识符=局部变量初始值设定项

局部变量初始值设定项:
表达式
数组初始值设定项


因此,
局部变量声明
可以表示为
type identifer=expression
。因此,使用
的规范告诉您的是,您可以以
var variableName=xxxxxxx
的形式声明变量,也可以只使用
xxxxxx
部分本身。

要看的关键问题实际上是第8.5.1节中的
局部变量声明的定义

局部变量声明声明一个或多个 更多的局部变量

局部变量声明:
局部变量类型 局部变量声明器

局部变量类型:
类型
变量

局部变量声明器:
局部变量声明器
局部变量声明器,局部变量声明器

局部变量声明符:
标识符
标识符=局部变量初始值设定项

局部变量初始值设定项:
表达式
数组初始值设定项


因此,
局部变量声明
可以表示为
type identifer=expression
。因此,使用
的规范告诉您的是,您可以以
var variableName=xxxxxxx
的形式声明一个变量,或者您可以只使用
xxxxxx
部分本身。

另一个
表达式的示例,我在这里没有提到:

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


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

这里没有提到的
表达式的另一个示例是:

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


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

var res=GetResource();使用(res){…}
不建议使用此样式,因为
res
using
块之后仍在作用域中,但已被释放。因此,仅使用标识符?对我来说,语法看起来非常宽松,而且在语法层面上,似乎所有表达式都是允许的。@Ali:“只有一个标识符?”——正如你所说的,这是一个表达式。当然,它是!我想知道是否允许有更复杂的,比如条件表达式。是的,它们是。任何表达都是允许的