gpt4 book ai didi

c# - 如果它是 IDisposable,我可以 "inline"变量吗?

转载 作者:可可西里 更新时间:2023-11-01 08:33:47 29 4
gpt4 key购买 nike

我是否必须这样做才能确保正确处理 MemoryStream?

  using (MemoryStream stream = new MemoryStream(bytes))
using (XmlReader reader = XmlReader.Create(stream))
{
return new XmlDocument().Load(reader);
}

或者是否可以内联 MemoryStream 使其超出范围?像这样?

  using (XmlReader reader = XmlReader.Create(new MemoryStream(bytes)))
{
return new XmlDocument().Load(reader);
}

最佳答案

一般来说,是的,您应该按照第一个示例编写代码。

有些类拥有传递给它的对象的所有权,因此当您处置外部对象时,它会自动为您处置内部对象,但这是规则的异常(exception)。

无论如何,多次调用 Dispose 应该是安全的。也就是说,对象应该实现它,以便它是安全的,只在第一次完成工作。

因此,作为一般规则,使用第一种语法。

现在,对于指定的示例,这应该无关紧要,因为 MemoryStream 并没有真正保留任何需要处理的资源,但这有一个问题期待也。如果您知道某个对象的给定版本不使用资源,那么忽略 Dispose 是安全的,那么如果该对象将来获得这样的资源,您就会突然发生泄漏。

除非您看到给定代码有一些不利影响,例如增加太多开销,否则我根本不会担心它。

关于c# - 如果它是 IDisposable,我可以 "inline"变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2245425/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com