Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对代码分析提出建议,多次处理_C#_.net_Code Analysis - Fatal编程技术网

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和其他库中,有些对象拥有您提供给它们的一次性对象的所有权。但这并不能保证。您需要单独检查每个箱子。可能的副本