asp.net 如何在函数中传递list作为参数

f0brbegy  于 2023-02-06  发布在  .NET
关注(0)|答案(5)|浏览(189)

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

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

我到底该怎么做呢?

sqserrrh

sqserrrh1#

你得这样做,

void Yourfunction(List<DateTime> dates )
{

}
rxztt3cl

rxztt3cl2#

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

k4emjkb13#

应该始终避免使用List<T>作为参数,这不仅是因为这种模式减少了调用方将数据存储在不同类型集合中的机会,而且调用方必须首先将数据转换为List
将一个IEnumerable转换成一个List需要O(n)的复杂度,这是绝对不必要的,而且它还创建了一个新的对象。
TL;DR你应该根据你想对你的收藏做什么来使用一个合适的接口,比如IEnumerableIQueryable。)
在您的情况下:

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

xuo3flqw4#

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

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

但是,最好尽可能使用最通用的(通常是基本的)接口,因此我将使用

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

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

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

e7arh2l6

e7arh2l65#

我需要这个在C#中的Unity,所以我想它可能对某些人有用。这是一个将AudioClip列表传递给名为ChooseClip的函数的示例:

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

相关问题