为什么ReSharper的警告我下面的代码示例中“访问到设置关闭”:
using (SqlCommand command = new SqlCommand())
{
command.Parameters.Add("@temp", SqlDbType.VarChar);
Action<string> action = str =>
{
command.Parameters["@temp"].Value = string.Empty;
};
}
我不使用外委托using
的语句...如何解决这一问题?
您引用command
在action
中,可以使用action
在其他地方,然后在using
和reference
,以处置command
。
ReSharper的是告诉你,你可以访问到设置关闭,因为外面用行动using
将导致。 避免使用一次性对象这样的,当然它会抛出NullReferenceException
,但它可以是很难找到真正的问题。
此代码:
Action<string> action = str =>
{
command.Parameters["@temp"].Value = string.Empty;
};
定义了使用委托可变 。 委托是可以传递围绕作为变量,并要求其他地方使用的方法的定义。 是一次性关闭。
究其原因ReSharper的标志,这是因为这个代码不直接表示在此委托将实际调用什么样的时间点。 可能的是,原则上,该委托的定义将围绕(和将被调用) 已被释放之后。
ReSharper的8.1,最新版本为写这篇文章,是不能确定该委托真的不能从别的地方调用。