什么是“访问到设置封闭”的意思是在这里吗?(What does “access to dispose

2019-10-18 17:59发布

为什么ReSharper的警告我下面的代码示例中“访问到设置关闭”:

using (SqlCommand command = new SqlCommand())
{
    command.Parameters.Add("@temp", SqlDbType.VarChar);
    Action<string> action = str =>
        {
            command.Parameters["@temp"].Value = string.Empty;
        };
}

我不使用外委托using的语句...如何解决这一问题?

Answer 1:

您引用commandaction中,可以使用action在其他地方,然后在usingreference ,以处置command

ReSharper的是告诉你,你可以访问到设置关闭,因为外面用行动using将导致。 避免使用一次性对象这样的,当然它会抛出NullReferenceException ,但它可以是很难找到真正的问题。



Answer 2:

此代码:

Action<string> action = str =>
{
    command.Parameters["@temp"].Value = string.Empty;
};

定义了使用委托可变 。 委托是可以传递围绕作为变量,并要求其他地方使用的方法的定义。 是一次性关闭。

究其原因ReSharper的标志,这是因为这个代码不直接表示在此委托将实际调用什么样的时间点。 可能的是,原则上,该委托的定义将围绕(和将被调用) 已被释放之后。

ReSharper的8.1,最新版本为写这篇文章,是不能确定该委托真的不能从别的地方调用。



文章来源: What does “access to disposed closure” mean here?