CA2202不要多次放置物体,如何解决?

时间:2019-06-13 04:19:37

标签: c# static-code-analysis

private string GetFileContent(string path)
{
    if(File.Exists(HttpContext.Current.Server.MapPath(path)))
    {
        FileStream fs=null;
        try
        {
            fs = new FileStream(HttpContext.Current.Server.MapPath(path), FileMode.Open, FileAccess.Read);
            using (TextReader tr = new StreamReader(fs))
            {
                fs.Flush();
                return tr.ReadToEnd();
            }
        }
        finally
        {
             fs.Close();
        }
    }
}

如果将FileStream fs分配给null代码正在运行而没有警告,但我不想将filestream分配给null,即在使用Statement时fs = null。

那么,不分配空值的正确写法是什么?

1 个答案:

答案 0 :(得分:2)

摆脱try / finally

    using (FileStream fs = new FileStream(HttpContext.Current.Server.MapPath(path), FileMode.Open, FileAccess.Read))
    using (TextReader tr = new StreamReader(fs))
    {
        fs.Flush();
        return tr.ReadToEnd();
    }

using已经在做这样的事情:

{
    FileStream fs = new FileStream(HttpContext.Current.Server.MapPath(path), FileMode.Open, FileAccess.Read);
    try
    {
        // code inside the `using` goes here
    }
    finally
    {
        fs.Dispose();
    }
}

从本质上讲,处置遗嘱将关闭流。

有关using的更多信息,请参见this question