как передать список как параметр в функцию
Теперь я хочу передать этот список, т.е. даты, в качестве параметра некоторой функции, например:
Как именно я могу этого добиться?
@Mir — Мой быстрый поиск привел меня к этому вопросу. Так что +1 от меня ОП, за которого проголосовали. — hmedia1
5 ответы
Вам нужно сделать это так,
ответ дан 21 дек ’12, 16:12
ответ дан 21 дек ’12, 16:12
Вы всегда должны избегать использования List<T> как параметр. Не только потому, что этот шаблон уменьшает возможности вызывающего объекта для хранения данных в коллекции другого типа, но и потому, что вызывающий объект должен преобразовать данные в List первый.
Преобразование IEnumerable в List стоит O(n) сложности, что абсолютно не нужно. И это также создает новый объект.
TL; DR, вы всегда должны использовать правильный интерфейс, например IEnumerable or IQueryable в зависимости от того, что вы хотите сделать со своей коллекцией. 😉
Вы можете передать это как List<DateTime>
Однако лучше использовать максимально общий (как правило, базовый) интерфейс, поэтому я бы использовал
Вы также можете позвонить .AsReadOnly() перед передачей списка методу, если вы не хотите, чтобы метод модифицировал список — добавьте или удалите элементы.
ответ дан 21 дек ’12, 16:12
Посмотрите на код в вопросе. Он создает список дат и добавляет в него отдельные даты. — Якуб Конецки
Мне это нужно для Unity в С#, поэтому я подумал, что это может быть полезно для кого-то. Это пример передачи списка AudioSource любой функции, которую вы хотите:
Generic List<T> as parameter on method
How can I use a List<T> as a parameter on a method, I try this syntax :
I got compilation error:
The type or namespace name ‘T’ could not be found (are you missing a using directive or an assembly reference?)
3 Answers 3
To take a generic List<T> vs a bound List<int> you need to make the method generic as well. This is done by adding a generic parameter to the method much in the way you add it to a type.
Как передать список объектов в функцию
Я пишу функцию, которая должна получить список объектов книги в качестве аргумента. В каждом объекте книги есть личный член цены. Предполагается, что функция сравнивает цены каждой книги и возвращает книгу с самой высокой ценой.
В основном я не совсем уверен, как передать фактический список «L1» или содержимое L1 в функцию, которая будет сравнивать цены. Я думаю, что я запутался, потому что для вызова функции getMostExoy я бы сделал что-то вроде:
но если я вызываю свою функцию с помощью L1, должен ли я передавать какие-либо аргументы, а если нет, то как мне получить доступ к цене члена частных данных внутри функции getMostExoy ()?
Решение
Почему должен price быть частным членом book ? Мне кажется, что «каждый» должен знать цену книги …
Если вы действительно можете сделать это публичным, почему бы не использовать более простой std::vector<book> со свободной функцией getMostExpensive() ?
Если вы должны сохранить price private , ты можешь сделать UnsortedType friend из book :
в таком случае L1 имеет доступ к рядовым book ,
Однако мое практическое правило по умолчанию таково, что всякий раз, когда мне нужно friend в моем дизайне есть недостаток: p
как передать список в качестве параметра в функцию
Вы всегда должны избегать использования List<T> в качестве параметра. Не только потому, что этот шаблон уменьшает возможности вызывающей стороны сохранять данные в другом виде сбора, но также и вызывающая сторона должна сначала преобразовать данные в List .
Преобразование IEnumerable в List стоит O (n) сложности, что абсолютно не нужно. И это также создает новый объект.
TL; DR вы всегда должны использовать правильный интерфейс, такой как IEnumerable или IQueryable зависимости от того, что вы хотите сделать со своей коллекцией. 😉
Вы можете передать его как List<DateTime>
Однако лучше использовать наиболее общий (как обычно, базовый) интерфейс, поэтому я бы использовал
Вы также можете вызвать .AsReadOnly() , прежде чем передавать список методу, если вы не хотите, чтобы метод изменял список — добавляйте или удаляйте элементы.