Как передать список в функцию c
Перейти к содержимому

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

  • автор:

 

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

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

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

@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?)

Jonathan Escobedo's user avatar

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() , прежде чем передавать список методу, если вы не хотите, чтобы метод изменял список — добавляйте или удаляйте элементы.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *