2010-10-28 64 views
2

如何修复语句中的以下函数中的CA2000代码分析错误DataTable dtSummary = new DataTable(“Summary”);? CA2000关闭如果我在dtSummary上使用block,并且我不能在下面的函数中使用block,否则一些其他函数将使用GetSummaryReportTable函数返回数据表。如何解决在新的DataTable实例上的CA2000代码分析错误

私人数据表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

请格式化你的代码中选择和使用101010按钮,它是不可读这样的... [ – Lorenzo 2010-10-28 00:13:02

+0

可能重复我应该Dispose()DataSet和DataTable?](http://stackoverflow.com/questions/913228/should-i-dispose-dataset-and-datatable) – 2015-05-27 09:35:27

回答

2

这话题已被彻底这里讨论:Should I Dispose() DataSet and DataTable?

总之,如果你真的想遵循样式警察规则,那么你不能使用DataTable作为返回类型。您必须使用其他对象来返回您的数据并在using语句中包装DataTable对象。

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块中,并且仅当StreamWriter块未成功创建时才将FileStream对象置于finally 块中。

这似乎是解决这个警告优越的方式。

相关问题