如果我在使用块中使用对象初始化程序,则会收到代码分析警告,指出未正确处理对象的释放:
CA2000:Microsoft.Reliability:在方法'ReCaptcha.CreateReCaptcha(this HtmlHelper,string,string)'中,对象'<> g__initLocal0'沿所有异常路径未被处理。在所有对它的引用超出范围之前调用System.IDisposable.Dispose对对象'&lt;> g__initLocal0'。
这是代码:
使用ReCaptchaControl:
//创建新的控件实例
using (var control = new ReCaptchaControl()
{
ID = id, //设置控件ID
Theme = theme, //设置主题
SkipRecaptcha = false //不跳过reCAPTCHA验证
})
{
// 在这里执行相关操作
}
如果我不使用对象初始化器,代码分析器会很高兴:
使用 ReCaptchaControl()
{
ID = id;
主题 = theme;
跳过Recaptcha = false;
//在此处执行某些操作
}
这两个代码块有什么不同呢?我原以为它们会生成相同的中间语言(IL)代码。难道这是代码分析引擎的一个bug吗?