如何在函数中传递list作为参数

我已经采用了一个列表并在其中插入了一些值

public List dates = new List(); DateTime dt1 = DateTime.Parse(12/1/2012); DateTime dt2 = DateTime.Parse(12/6/2012); if (dt1 <= dt2) { for (DateTime dt = dt1; dt <= dt2; dt = dt.AddDays(1)) { dates.Add(dt); } } 

现在我想通过这个列表,即日期作为参数到某些function,如 –

 somefunction(dates); 

我怎么能实现这个目标?

你需要像这样做,

 void Yourfunction(List dates ) { } 
 public void SomeMethod(List dates) { // do something } 

您可以将其作为List传递

 public void somefunction(List dates) { } 

但是,最好使用最通用的(如一般的,基本的)接口,所以我会使用

 public void somefunction(IEnumerable dates) { } 

要么

 public void somefunction(ICollection dates) { } 

如果您不希望方法修改列表,则可能还需要在将列表传递给方法之前调用.AsReadOnly() – 添加或删除元素。

您应该始终避免使用List作为参数。 不仅因为这种模式减少了调用者将数据存储在不同类型的集合中的机会,而且调用者还必须首先将数据转换为List

IEnumerable转换为List花费O(n)复杂度,这绝对是不必要的。 它还创建了一个新对象。

TL; DR你应该总是使用适当的界面,如IEnumerableIQueryable这取决于你想对你的collections做什么。 ;)

在你的情况下:

 public void foo(IEnumerable dateTimes) { } 

实际上我需要这个用于C#中的统一 ,所以我认为这可能对某些人有用。这是一个将AudioSource列表传递给你想要的任何函数的例子:

 private void ChooseClip(GameObject audioSourceGameObject , List sources) { audioSourceGameObject.GetComponent ().clip = sources [0]; }