2011-06-15 71 views
3

我有這段從VB.NET轉換而來的代碼。參考參數不被分類爲變量 - 更好地解決這個問題?

private static void PrivateExecuteNonQuery(ref Providers enumProvider, ref string statement, ref CommandType commandType, ref ArrayList paramCollection, ref IDbConnection conn, ref Int16 CommandTimeout) 
    { 
     ExecuteSqlServerNonQuery(ref statement, ref commandType, ref paramCollection, ref (SqlConnection)conn, ref CommandTimeout); 
    } 

,因爲它在說裁判(SqlConnection的)conn是不是一個變量的形式,所以我想你不能傳遞方法params用於在一個裁判,我得到一個錯誤?

因此,這似乎是一個哈克解決方案,我雖然:

​​3210

任何人都知道一個更好的方式來滿足這種ref或使這種清潔劑?

+5

只是擺脫所有的裁判....你不應該修改任何這些參數... – 2011-06-15 03:26:31

+3

是否有你甚至使用'ref'參數的原因?說實話,我看到警示燈。 – 2011-06-15 03:26:52

+0

看起來你不能同時通過'ref'和typecast。我將不得不分成兩行,但根本不看「哈克」。 – 2011-06-15 03:34:16

回答

12

目的ref實際上是允許該方法修改由調用者傳入的變量的內容。如果您有偶發ref參數,由於從不區分使用ByRef的Visual Basic代碼轉換,那麼最終會出現這種情況。

你有兩個選擇:

  • 刪除不必要的ref參數預選賽,無論是在主叫用戶和被叫,或
  • 使用真正變量,虛擬變量,如果你有,作爲參數傳遞給方法

所以,答案是,沒有,沒有更好的方式來做到這一點,沒有擺脫不必要的ref參數限定符。

什麼是不必要的ref參數限定符?這是一個參數,實際上從來沒有分配在方法的主體任何地方。大多數參數不需要是ref,那些通常從方法的邏輯檢查中很明顯。