这是我的代码,它给了我CA2000“new DataTable()...”和“new DataColumn()...”
usersDS.Tables.Add(new DataTable()
{
TableName = "Users",
Columns = { new DataColumn() { ColumnName = "Handle", DataType = typeof(string) }, new DataColumn() { ColumnName = "Nickname" ,DataType = typeof(string) } }
});
是否可以在不声明变量的情况下进行修复?
答案 0 :(得分:6)
这几乎与How to fix a CA2000 IDisposable C# compiler warning, when using a global cache重复。也许它应该被认为是那个副本。我不确定。
代码分析是合法地抱怨理论上可以在没有IDisposable
对象被处理的情况下完成该方法,并且不将其安全地存储在其他地方。如果在DataTable
对象初始化期间发生异常或将DataTable
对象添加到usersDS.Table
对象(无论是什么),则会发生后者。
如果你能保证这里不会抛出任何异常,那么恕我直言就可以完全抑制CA警告了。在这种情况下,你比CA更了解,并且你承诺你知道你在做什么。
如果您无法做出保证,那么没有......如果不引入局部变量就无法修复警告,以便您能够在发生异常时处置该对象。例如:
DataTable dataTable = null;
DataColumn dataColumn1 = null, dataColumn2 = null;
try
{
dataColumn1 = new DataColumn() { ColumnName = "Handle", DataType = typeof(string) };
dataColumn2 = new DataColumn() { ColumnName = "Nickname", DataType = typeof(string) };
dataTable = new DataTable()
{
TableName = "Users",
Columns = { dataColumn1, dataColumn2 }
};
usersDS.Tables.Add(dataTable);
}
catch
{
if (dataTable != null)
{
dataTable.Dispose();
}
if (dataColumn1 != null)
{
dataColumn1.Dispose();
}
if (dataColumn2 != null)
{
dataColumn2.Dispose();
}
throw;
}