在工程属性里启用了代码分析,下边的第一个写法能通过;第2个写法会有一个警告:
using (var form = new Form()) //ok
{
form.Location = new Point(100, 100);
form.ShowDialog();
}
using (var form = new Form {Location = new Point(100, 100)}) //CA2000
{
form.ShowDialog();
}
具体提示:
CA2000 丢失范围之前释放对象
在方法 'MyClass1.a()' 中,'<>g__initLocal0' 对象未按所有异常路径释放。请在对 '<>g__initLocal0' 对象的所有引用超出范围之前,对该对象调用 System.IDisposable.Dispose。
------解决思路----------------------
这是因为第二种写法生成的代码差不多是这样:
它报的是这个临时的form2在丢失范围之前没有释放。实际上form和form2是一个东西,而且那样写这个临时的form2在using之外也没法直接使用,所以这个警告可以忽略。
var form2 = new Form();
form2.Location = new Point(100, 100);
using (var form = form2)
{
form.ShowDialog();
}