2017-04-24 90 views
1

接下來方法是一類內部的自List繼承<類B>:重載以便與(PARAMS T []),(T PARAM)

// Method A: Updates from specified start to end of list. 
public void UpdateItems(int start = 0) { 
    UpdateItems (
     Enumerable.Range (start, this.Count - start).ToArray() 
    ); 
} 

// Method B: Updates separate indexes when necessary. 
public void UpdateItems(params int[] indexes) { 
    foreach (int i in indexes) 
     this [i].id = i + 1; 
} 

有時有必要更新項目性質(例如公共INT ID)在不同的索引,有時我只需要一個開始索引,並從它更新到列表的末尾。我想出了這個簡單的兩種方法,一切都很好,直到我需要在方法B中使用一個簡單的參數爲params,它被用作方法A的start。我知道這是因爲他們共享相同的名稱,我仍然想要去測試。

問題:

  • 什麼是處理這類案件的最好方法? (即你已經爲(params T [])和(T param))重載了方法。我知道一個簡單的名稱更改就足夠了,但我想要更深入的意見/解決方案。
  • 重載分辨率是如何完成的?
+1

它並不真正清楚你在找什麼在這裏,是誠實的。使用更清晰的名稱,例如'UpdateItemRange' vs'UpdateItemsByIndex'似乎是最好的主意。 –

+2

你可以通過包含參數名來消除歧義......但是......坦率地說,我會選擇更好的方法名......或者讓它不是「params」 - 在編譯時你會多久知道參數?不確定'params'在這裏是有用的...... –

+0

考慮到MarcGravell和JonSkeet的觀點,我已經做出了適當的改變,一切都變得更加簡潔。感謝這兩位MVP,我真的很感謝你的幫助,而且我真的很喜歡這兩者。我將自己搜索更多關於這個重載解決方案的信息。 – Ruri

回答

1

其實你可以調用與PARAM名稱的方法,例如

UpdateItems(indexes: 1); //Will call method with params 
UpdateItems(1); //Will call method with start index 

但在我看來,這不是一個很好的解決方案。最好有兩種名稱不同的方法。

也是另一種方式來調用方法使用參數將被傳遞整數數組作爲方法參數

UpdateItems(new [] {1});