using 语句 - 确保正确使用可释放对象 - C# reference

using 语句 - 确保正确使用可释放对象 - C# reference

using 语句可确保正确使用 IDisposable 实例:

var numbers = new List();

using (StreamReader reader = File.OpenText("numbers.txt"))

{

string line;

while ((line = reader.ReadLine()) is not null)

{

if (int.TryParse(line, out int number))

{

numbers.Add(number);

}

}

}

当控件离开 using 语句块时,将释放获取的 IDisposable 实例。

using 语句可确保即使在 using 语句块内发生异常的情况下也会释放可释放实例。 在前面的示例中,打开的文件在处理完所有行后关闭。

使用 await using 语句来正确使用 IAsyncDisposable 实例:

await using (var resource = new AsyncDisposableExample())

{

// Use the resource

}

有关使用 IAsyncDisposable 实例的详细信息,请参阅实现 DisposeAsync 方法一文中的使用异步可释放对象部分。

还可以使用不需要大括号的 using声明:

static IEnumerable LoadNumbers(string filePath)

{

using StreamReader reader = File.OpenText(filePath);

var numbers = new List();

string line;

while ((line = reader.ReadLine()) is not null)

{

if (int.TryParse(line, out int number))

{

numbers.Add(number);

}

}

return numbers;

}

在 using 声明中进行声明时,局部变量在声明它的作用域末尾释放。 在前面的示例中,会在某个方法的末尾释放对象。

由 using 语句或声明进行声明的变量是只读的。 无法重新分配该变量或将其作为 ref 或 out 参数传递。

可以在一个 using 语句中声明多个相同类型的实例,如以下示例所示:

using (StreamReader numbersFile = File.OpenText("numbers.txt"), wordsFile = File.OpenText("words.txt"))

{

// Process both files

}

在一个 using 语句中声明多个实例时,它们将按声明的相反顺序释放。

还可以将 using 语句和声明与适用于可释放模式的 ref 结构的实例一起使用。 也就是说,它具有可访问、无参数且具有Dispose返回类型的实例void方法。

return块内部using仍保证处置,编译器将其重写为一个try/finally,因此始终在方法返回之前调用资源Dispose。

using 语句也可以采用以下形式:

using (expression)

{

// ...

}

其中 expression 会生成可释放实例。 下面的示例演示了这一操作:

StreamReader reader = File.OpenText(filePath);

using (reader)

{

// Process file content

}

警告

在前面的示例中,当控件离开 using 语句后,可释放实例会在其释放后仍保留在范围内。 如果进一步使用该实例,可能会遇到异常,例如 ObjectDisposedException。 因此,建议在 using 语句中声明可释放变量,或者使用 using 声明进行声明。

C# 语言规范

有关详细信息,请参阅 C# 语言规范的 using 语句部分。

另请参阅

System.IDisposable

System.IAsyncDisposable

使用实现 IDisposable 的对象

实现 Dispose 方法

实现 DisposeAsync 方法

使用简单的“using”语句(样式规则 IDE0063)

using 指令

相关推荐

腥红之月亚索价格

腥红之月亚索价格

09-19 👁️ 4934
手机汽车保养app排行榜TOP10推荐
冰箱冷藏室的灯不亮了是什么原因,冰箱灯不亮但正常运行
如何自己制作wallpaper壁纸
华硕GTX670

华硕GTX670

07-03 👁️ 8336
详细步骤教你在Excel中制作实用的日历日程表
《上古卷轴5:天际》龙种图鉴大全
迅雷怎么用手机号登录 迅雷用手机号登录方法【教程】
知足常乐的意思解释及典故(故事)