2017-04-24 94 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});