2015-04-04 70 views
0

我有這樣的代碼,我用遍了我的應用程序將數據保存到數據庫中。爲什麼CodeRush會在代碼中提醒我一個未使用的聲明?

public bool SaveDemo() 
    { 
     bool success = false; 

     try 
     { 
      using (DataTable dt = DataAccess.ExecuteDataTable("[dbo].[udp_Customers_ups]", 
       DataAccess.Parameter(CustomerIdColumn, CustomerId), 
       DataAccess.Parameter(CodeColumn, Code), 
       DataAccess.Parameter(CompanyColumn, Company), 
       DataAccess.Parameter(IsDeletedColumn, IsDeleted), 
       DataAccess.Parameter(LastUpdatedColumn, LastUpdated), 
       DataAccess.Parameter(UpdatedByColumn, UpdatedBy))) 

       success = true; 
     } 
     catch 
     { 
      success = false; 
     } 

     return success; 
    } 

該代碼的工作原理是這樣的,我的意思是它將數據保存回數據庫。然而CodeRush抱怨dt是一個未使用的聲明。而且由於使用是(我認爲)使用dt我會認爲警告是誤報。所以我還想知道CodeRush是錯誤的還是我錯過了一些東西?

+0

出於好奇,爲什麼使用塊 – 2015-04-04 15:30:43

+0

我開始使用使用塊,因爲我已閱讀,自動調用Dispose()方法,是一個更好的做法,然後做它沒有它。 – 2015-04-04 15:40:12

+0

@WorkSmarter這種情況並非如此 - 在* *聲明未使用(OP的反應是正確的) – 2015-04-04 15:51:54

回答

2

什麼CR想說的是,在:

using (DataTable dt = DataAccess.ExecuteDataTable ... 

你是使用的dt聲明不;變量保持未變。

的重構按鈕將改變這

using (DataAccess.ExecuteDataTable ... 

即它仍然是一個using聲明,但你不會有一個變量來引用它。

當你這樣做,你可以做一些內嵌結果轉換,產生:

try 
    { 
     using (DataAccess.ExecuteDataTable("[dbo].[udp_Customers_ups]", 
      DataAccess.Parameter(CustomerIdColumn, CustomerId), 
      DataAccess.Parameter(CodeColumn, Code), 
      DataAccess.Parameter(CompanyColumn, Company), 
      DataAccess.Parameter(IsDeletedColumn, IsDeleted), 
      DataAccess.Parameter(LastUpdatedColumn, LastUpdated), 
      DataAccess.Parameter(UpdatedByColumn, UpdatedBy))) 
      return true; 
    } 
    catch 
    { 
     return false; 
    } 

我會讓別人質疑是否在catch塊包裝這樣的電話是個好主意......

+0

既然你彈出嘗試捕捉可能還有一個不好的做法,讓我問這個。如果我擺脫它,我可以假設一個成功的使用(DataAccess.ExecuteDataTable將打百達真和unsuccessfull一個不會呢?如果是這樣我可以將其刪除,仍然可以得到我想要得到的結果的情況。 – 2015-04-04 16:15:51

+0

@BukHix不是100%你的意思如果DataAccess ....調用拋出1)Dispose將會發生2)執行後不會運行任何語句。你需要做的一件事就是提供一個聲明作爲使用塊的主體。由於空語句(';')會觸發編譯器警告,所以下一個最好的情況是空塊: - '{}'。你能證明你在問什麼嗎?我的投訴再一個缺點是,你應該只趕上在最高級別,日誌等,而不是在地毯下去打掃它深你的邏輯 – 2015-04-04 17:52:08

+0

我想我要問這一個新的問題,因爲我真的想明白這裏面代碼確實並不想對此做出任何假設。 – 2015-04-04 17:58:19

相關問題