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

25

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

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

我该如何准确地实现这个目标?


13
@Mir - 我快速搜索得出了这个问题。所以我给被踩的提问者点赞。 - hmedia1
5个回答

46

你需要这样做:

void Yourfunction(List<DateTime> dates )
{

}

9
您应该避免使用List<T>作为参数。这不仅会减少调用者在不同类型的集合中存储数据的机会,而且调用者必须首先将数据转换为List
IEnumerable转换为List成本为O(n)复杂度,这是完全不必要的。并且它还会创建一个新对象。
简而言之,您应该根据要对集合进行的操作使用适当的接口,如IEnumerableIQueryable。 ;)
在您的情况下:
public void foo(IEnumerable<DateTime> dateTimes)
{
}

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

5
您可以将其作为List<DateTime>传递。
public void somefunction(List<DateTime> dates)
{
}

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

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

或者

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

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


1
看一下问题中的代码。它创建了一个日期列表,并将单个日期添加到其中。 - Jakub Konecki

2

我需要这个用于C#中的Unity,所以我认为对于某些人来说可能会很有用。这是一个将AudioClips列表传递给名为ChooseClip函数的示例:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接