C# 对代码分析提出建议,多次处理
我只是想从一个比我更有经验的人那里得到一些建议 下面的代码C# 对代码分析提出建议,多次处理,c#,.net,code-analysis,C#,.net,Code Analysis,我只是想从一个比我更有经验的人那里得到一些建议 下面的代码 XmlSerializer serializer = new XmlSerializer(typeof(Installation)); using (var sw = new StringWriter()) { using (var xw = XmlWriter.Create(sw)) { serializer.Serialize(xw, Insta
XmlSerializer serializer = new XmlSerializer(typeof(Installation));
using (var sw = new StringWriter()) {
using (var xw = XmlWriter.Create(sw)) {
serializer.Serialize(xw, Installation);
}
xmlResult = sw.ToString();
}
在代码分析中有以下报告
CA2202不要多次处理对象对象“sw”可以
在方法中多次处理
'视图\u调试\u安装SubsidyForm.SaveInstall(字符串)'。到
避免生成不应调用的System.ObjectDisposedException
对一个对象进行多次处置。示例:行:
766 nc1_经销商门户安装SubsidyForm.aspx.cs 766
有人能解释我是如何处理“sw”的吗?我在这里做错了什么?
StringWriter
将由XmlWriter
处理,因此,通过使用两个using语句,它将被处理两次,更改代码如下:
XmlSerializer serializer = new XmlSerializer(typeof(Installation));
var sw = new StringWriter())
using (var xw = XmlWriter.Create(sw))
{
serializer.Serialize(xw, Installation);
xmlResult = sw.ToString();
}
为什么XmlWriter会处理它?我只是想澄清一下。(可能是因为sw用于创建XmlWriter对象的事实)因此,如果我将一个对象与using语句中实例化的另一个对象一起使用,第一个对象也将被释放?如果
XmlWriter.create()
失败,sw
不会被释放。代码分析也应该抱怨这一点。在@BenRobinson发布的代码中,xw
总是被处理掉——但是sw
不一定,因为它不在任何使用的块中。与其处理两次,此代码可能根本不会处理(当然,对于StringWriter
,这没有实际意义)。@Stuart:不,不一定。在.NET和其他库中,有些对象拥有您提供给它们的一次性对象的所有权。但这并不能保证。您需要单独检查每个箱子。可能的副本