如何修复新DataTable实例上的CA2000代码分析错误

时间:2010-10-28 00:03:08

标签: .net

如何修复语句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; 

}

2 个答案:

答案 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块时阻止。

这似乎是解决警告的一种更好的方式。