[英]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是撰写本文时的最新版本,无法确定是否不能从其他地方真正调用此委托。
您引用command
在action
中,可以使用action
在其他地方,然后在using
和reference
,以处置command
。
Resharper告诉您可以访问已处置的闭包,因为在使用外部using
动作会导致这种情况。 避免使用那样的一次性对象,当然,它将抛出NullReferenceException
,但是可能很难找到真正的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.