【发布时间】:2020-08-25 17:12:50
【问题描述】:
我已经看到有关此问题的帖子,但我似乎无法通过遵循此处的示例和其他在线位置来摆脱警告。你看到我缺少什么以避免得到CA2202 Warning 说:
为避免生成 System.ObjectDisposedException,您不应在一个对象上多次调用 Dispose。
我认为使用会处理xmlReader。是否也在处理stringReader?
StringReader stringReader = null;
try
{
stringReader = new StringReader(mOutputXmlString);
using (XmlReader xmlReader = XmlReader.Create(stringReader, lXmlReaderSettings))
{
addResponse = (AddResponseStructure)mDeserializer.Deserialize(xmlReader);
alertDetail = new AlertHostDetail(addResponse);
}
}
catch
{
_loggingManager.Log(LoggingHelpers.LoggingLevel.Error, "Error deserializing object.");
}
finally
{
if (stringReader != null)
stringReader.Dispose();
}
警告位于stringReader.Dispose() 行。
【问题讨论】:
-
当您退出 using 语句时,阅读器会自动释放。
-
对@jdweng 的评论发表评论-
xmlReader和stringReader都将在正常退出using语句块时或通过抛出的异常处理。 -
@Rich
IDisposables 被IDisposable消费的地方,在.Net 中很常见的是,消费的IDisposable在消费时也会被处理。 -
@phuzi 需要明确的是,双重处置只是因为
XmlReader处置了StringReader。此处显示的代码不会双重处理。