这里的“访问处置关闭”是什么意思
本文关键字:是什么 意思 访问 这里 | 更新日期: 2023-09-27 18:34:19
为什么 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;
};
定义使用命令的委托变量操作。委托是一个方法定义,可以作为变量传递,并使用操作在其他地方调用。调用()。命令是一次性闭合。
Resharper 标记此代码的原因是,此代码没有直接指示实际调用此委托的时间点。原则上,委托的定义可能会在命令被释放后出现(并将被调用)。
Resharper 8.1 是撰写本文时的最新版本,无法确定此委托是否真的不能从其他地方调用。
您在
action
中引用command
,您可以在其他地方使用action
,然后在using
中使用,reference
处理command
。
Resharper告诉你,你可以访问处置的关闭,因为在using
之外使用操作会导致这种情况。避免使用这样的一次性物品,当然会扔NullReferenceException
,但很难找到真正的问题。