繁体   English   中英

这里的“获得封闭处分”是什么意思?

[英]What does “access to disposed closure” mean here?

为什么Resharper在以下代码示例中警告我有关“访问已处置的封闭”的信息:

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

我不在使用using语句之外使用委托...如何解决此问题?

这段代码:

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

that uses . 定义使用的委托变量 . 委托是一种方法定义,可以作为变量传递,并可以使用其他地方调用。 is a disposable closure. 是一次性的封口。

Resharper标记此的原因是因为此代码未直接指示实际在什么时间调用此委托。 has been disposed. 从原则上讲,委托的定义可能会在处理之后出现(并被调用)。

Resharper 8.1是撰写本文时的最新版本,无法确定是否不能从其他地方真正调用此委托。

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

Resharper告诉您可以访问已处置的闭包,因为在使用外部using动作会导致这种情况。 避免使用那样的一次性对象,当然,它将抛出NullReferenceException ,但是可能很难找到真正的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM