多次处置物体

2023-12-13

我有以下代码,它使用流来打开和修改 Open XML 文档,然后保存该流的新二进制表示形式:

MemoryStream stream = null;
try
{
    stream = new MemoryStream();
    stream.Write(this.GetBinaryRepresentation(), 0, this.GetBinaryRepresentation().Length);

    using (WordprocessingDocument document = WordprocessingDocument.Open(stream, true))
    {
        OfficeDocument.ModifyDocument(document);
        this.SetBinaryRepresentation(stream.ToArray());
        stream = null;
    }
}
finally
{
    if (stream != null)
    {
        stream.Dispose();
    }
}

我最初使用了两个 using 块(一个用于 MemoryStream,第二个用于 WordprocessingDocument),但收到警告 CA2202:“对象‘流’可以在方法中多次处理...”MSDN 文章,我将代码修改为上面的(将外部使用转换为尝试),但我仍然收到此警告。

我不确定如何构造此方法以确保在流上仅调用一次 Dispose。我不想简单地抑制此警告,因为 MSDN 文章指出您不应依赖 Dispose 进行多次安全调用。


多次处置一个物体应该始终是安全的。来自处置文档:

如果多次调用对象的 Dispose 方法,则该对象必须忽略第一次调用之后的所有调用。如果多次调用该对象的 Dispose 方法,则该对象不得引发异常。

话虽这么说,使用语句绝对是这里的最佳选择。您收到该方法的唯一原因是您是否显式处置该对象,这不是必需的,因为 using 语句应始终仅处置该对象一次。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多次处置物体 的相关文章

随机推荐