23

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

public List<DateTime> dates = new List<DateTime>();         
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);                    
    }       
}

现在我想将此列表(即日期)作为参数传递给某些函数,例如-

somefunction(dates);

我究竟怎样才能做到这一点?

4

5 回答 5

42

你需要这样做,

void Yourfunction(List<DateTime> dates )
{

}
于 2012-12-21T16:07:28.297 回答
8
public void SomeMethod(List<DateTime> dates)
{
    // do something
}
于 2012-12-21T16:06:48.030 回答
7

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

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

TL;DR 您应该始终使用适当的界面,例如IEnumerableIQueryable基于您想对您的收藏做什么。;)

在你的情况下:

public void foo(IEnumerable<DateTime> dateTimes)
{
}
于 2018-05-07T08:54:21.380 回答
3

您可以将其作为List<DateTime>

public void somefunction(List<DateTime> dates)
{
}

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

public void somefunction(IEnumerable<DateTime> dates)
{
}

或者

public void somefunction(ICollection<DateTime> dates)
{
}

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

于 2012-12-21T16:08:57.523 回答
1

我在 C# 中需要Unity,所以我认为它可能对某些人有用。这是将 AudioSources 列表传递给您想要的任何函数的示例:

private void ChooseClip(GameObject audioSourceGameObject , List<AudioClip> sources) {
    audioSourceGameObject.GetComponent<AudioSource> ().clip = sources [0];
}
于 2018-02-17T18:19:14.413 回答