2010-10-28 65 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 塊中。

這似乎是解決這個警告優越的方式。

相關問題