如何在函数中将列表作为参数传递

时间:2012-12-21 16:05:46

标签: c# asp.net

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

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);

我究竟能做到这一点?

5 个答案:

答案 0 :(得分:29)

你需要这样做,

void Yourfunction(List<DateTime> dates )
{

}

答案 1 :(得分:4)

public void SomeMethod(List<DateTime> dates)
{
    // do something
}

答案 2 :(得分:2)

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

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

TL; DR您应该始终使用适当的界面,例如IEnumerableIQueryable,具体取决于您对集合的要求。 ;)

在你的情况下:

public void foo(IEnumerable<DateTime> dateTimes)
{
}

答案 3 :(得分:1)

您可以将其作为List<DateTime>

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

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

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

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

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

答案 4 :(得分:0)

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

2-D