我使用代碼繁忙和重構專家(突出可能的代碼問題,如ReSharper等),他們告訴我,我有未置備的當地人(實施IDisposable)。所以,我有兩個using語句改變了代碼這樣:.NET IDisposable行內臨時工
using (Reports.StudentRegisters.StudentQueriesDataTable studentDataTable = new Reports.StudentRegisters.StudentQueriesDataTable())
{
using (StudentQueriesTableAdapter studentTableAdapter = new StudentQueriesTableAdapter())
{
try
{
studentTableAdapter.FillByQAbsenceRegRow(studentDataTable, year, school, division, progArea, sinceWeek, missedLessons, includeWdlTrn, ageMin, ageMax, studentGLH);
ds = new DataSet();
ds.Tables.Add((DataTable)studentDataTable);
ReportDocument.SetDataSource(ds.Tables[0]);
}
catch (Exception err)
{
LogReportError(err, this.CrystalViewer, null, ErrorType.Reporting);
}
}
}
由於studentTableAdapter使用一次我能線它象下面這樣:
using (Reports.StudentRegisters.StudentQueriesDataTable studentDataTable = new Reports.StudentRegisters.StudentQueriesDataTable())
{
try
{
(new StudentQueriesTableAdapter()).FillByQAbsenceRegRow(studentDataTable, year, school, division, progArea, sinceWeek, missedLessons, includeWdlTrn, ageMin, ageMax, studentGLH);
ds = new DataSet();
ds.Tables.Add((DataTable)studentDataTable);
ReportDocument.SetDataSource(ds.Tables[0]);
}
catch (Exception err)
{
LogReportError(err, this.CrystalViewer, null, ErrorType.Reporting);
}
}
顯然,在這種解決方案我現在也沒辦法調用處理StudentQueriesTableAdapter。這是否被自動調用,因爲沒有對對象的引用,或者這可能會導致某些處理不當。
我會強調我對我是否真的需要在兩個對象上使用dispose並不感興趣,我知道有些東西實現它並且它不是真的需要(儘管應該總是這樣做)。如果它被調用,我特別感興趣。
我喜歡你的雙倍使用技術,使它看起來更整潔。嵌套是我不喜歡我原來的代碼佈局的主要原因。 – PeteT 2009-12-08 20:32:57
是的,這是用嵌套'使用'塊來避免額外縮進的慣用方法。 – 2009-12-08 20:33:36