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

The*_*ode 15 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);                    
    }       
}
Run Code Online (Sandbox Code Playgroud)

现在我希望将这个列表,即日期作为参数传递给某些函数,如 -

somefunction(dates);
Run Code Online (Sandbox Code Playgroud)

我怎么能做到这一点?

Adi*_*dil 31

你需要这样做,

void Yourfunction(List<DateTime> dates )
{

}
Run Code Online (Sandbox Code Playgroud)


Zbi*_*iew 5

public void SomeMethod(List<DateTime> dates)
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)


Jak*_*cki 5

您可以将其作为List<DateTime>

public void somefunction(List<DateTime> dates)
{
}
Run Code Online (Sandbox Code Playgroud)

然而,最好使用最通用的(一般来说,基本的)接口,所以我会使用

public void somefunction(IEnumerable<DateTime> dates)
{
}
Run Code Online (Sandbox Code Playgroud)

或者

public void somefunction(ICollection<DateTime> dates)
{
}
Run Code Online (Sandbox Code Playgroud)

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


Rob*_*mán 5

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

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

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

在你的情况下:

public void foo(IEnumerable<DateTime> dateTimes)
{
}
Run Code Online (Sandbox Code Playgroud)