Как передать список в качестве параметра в функции

Я взял список и ввел в него какое-то значение

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

Теперь я хочу передать этот список i.e датам в качестве параметра для некоторой функции, например -

somefunction(dates);

Как именно я могу достичь этого?

Ответ 1

Вам нужно сделать это,

void Yourfunction(List<DateTime> dates )
{

}

Ответ 2

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

Ответ 3

Вы всегда должны избегать использования List<T> в качестве параметра. Не только потому, что этот шаблон уменьшает возможности вызывающей стороны сохранять данные в другом виде сбора, но также и вызывающая сторона должна сначала преобразовать данные в List.

Преобразование IEnumerable в List стоит O (n) сложности, что абсолютно не нужно. И это также создает новый объект.

TL; DR вы всегда должны использовать правильный интерфейс, такой как IEnumerable или IQueryable зависимости от того, что вы хотите сделать со своей коллекцией. ;)

В твоем случае:

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

Ответ 4

Вы можете передать его как List<DateTime>

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

Однако лучше использовать наиболее общий (как обычно, базовый) интерфейс, поэтому я бы использовал

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

или

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

Вы также можете вызвать .AsReadOnly(), прежде чем передавать список методу, если вы не хотите, чтобы метод изменял список - добавляйте или удаляйте элементы.

Ответ 5

Мне это нужно для Unity в С#, поэтому я подумал, что это может быть полезно для кого-то. Это пример передачи списка AudioSources любой функции, которую вы хотите:

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