繁体   English   中英

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

[英]how to pass list as parameter in function

我取了一个列表并在其中插入了一些值

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

我究竟如何才能做到这一点?

你需要这样做,

void Yourfunction(List<DateTime> dates )
{

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

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

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

TL;DR 你应该总是使用适当的接口,比如IEnumerableIQueryable基于你想用你的集合做什么。 ;)

在你的情况下:

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

您可以将其作为List<DateTime>传递

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

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

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

要么

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM