如何修复语句DataTable中的以下函数中的CA2000代码分析错误dtSummary = new DataTable(“Summary”);? CA2000关闭如果我在dtSummary上使用块而我不能在下面的函数中使用block,那么其他一些函数将使用来自GetSummaryReportTable函数的返回数据。
私有DataTable GetSummaryReportTable(IImportResult结果){
DataTable dtSummary = new DataTable("Summary");
dtSummary.Columns.Add(STATUS_STRING_COL_NAME, typeof(string));
dtSummary.Columns.Add(STATUS_COL_NAME, typeof(int));
DataRow dataRow;
foreach (ReportErrorLevel error in distinctErrors)
{
dataRow = dtSummary.NewRow();
dataRow[STATUS_STRING_COL_NAME] = error.ToString();
dataRow[STATUS_COL_NAME] = Convert.ToInt16(error);
dtSummary.Rows.Add(dataRow);
}
return dtSummary;
}
答案 0 :(得分:2)
这个主题在这里已经详细讨论过:Should I Dispose() DataSet and DataTable?。
简而言之,如果您真的想遵循样式警察规则,那么您就不能使用DataTable作为返回类型。您必须使用其他一些对象来返回数据并将DataTable对象包装在using语句中。
答案 1 :(得分:1)
检查出来:http://connect.microsoft.com/VisualStudio/feedback/details/535110/ca2000-false-positive#details
使用示例......
Private Function GetNewStream() As StreamWriter
m_CurrentFileName = GetNewFileName()
// Triggers CA2000
Return New StreamWriter(New FileStream(m_CurrentFileName, _
FileMode.Append, _
FileAccess.Write, _
FileShare.Read))
End Function
微软说:
“规则解雇的原因是因为如果StreamWriter的话 构造函数抛出异常,然后是新创建的FileStream 对象没有被处理掉。 您可以通过将其包装在一个中来解决此问题 try / finally阻塞并在finally中配置FileStream对象 仅在未成功创建StreamWriter块时阻止。“
这似乎是解决警告的一种更好的方式。