C# 处理对象

标签 c# dispose idisposable

我知道当您有以下代码时,会在 StreamReader 对象上调用 Dispose() 方法:

//Sample 1
using (StreamReader sr1 = new StreamReader(@"C:\Data.txt"))
{
    string s1 = sr1.ReadToEnd();
    //Do something with s1...
}

但是如果您编写这样的代码(示例 2),Dispose() 方法是否也会被调用?

//Sample 2
StreamReader sr2 = new StreamReader(@"C:\Data.txt");
using (sr2)
{
    string s2 = sr2.ReadToEnd();
    //Do something with s2...
}

最佳答案

是的,Dispose() 将在两个示例中调用。它们在功能上是等效的,除了在第二个示例中,已处置的 StreamReader 仍会在范围内。因此,首选第一种方法,因为使用已处置对象通常是一个坏主意。

然而,正如其他人所指出的,有时可以使用已处置的对象。在这种情况下,您可能想使用第二个示例。但你必须知道自己在做什么,我会尽可能避免这样做。

关于C# 处理对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3944734/

相关文章:

c# - 使用具有不同类型/类列表的通用方法

c# - 声音播放后处理音频?

c# - 如何处理 IDisposable?

c# - 为什么传统的 Dispose 模式会抑制 finalize?

java - 关闭前从 JDialog 内的 JPanel 读取数据

asp.net-mvc-4 - 依赖注入(inject) - 即将调用 EF 存储库 Dispose 方法

c# - ReactiveUI OneWayBind 泄漏句柄

c# - TreeView 项目更改事件

c# - 使用可选参数创建 Type 实例的 Linq 表达式?

c# - 基于浏览器的在线游戏问题