Как вернуть List?
Вернуть данные типа List
Добрый день, вопрос в следующем. Есть программа, которая считывает данные из файла, обрабатывает их.
Как передать list в поток и как такой же list вывести из потока?
Как передать list<string> в поток и как такой же list<string> вывести из потока в richtextbox.
Как преобразовать List> в IList>
Добрый день! Возникла задача преобразования листа в интерфейс листа. Не подскажите как грамотно.
Разбить List на несколько обьектов c List
Задумался как я то кусочками все делить оказалось не так уж просто :scratch: List<string>.
746 / 487 / 187
Регистрация: 30.12.2012
Сообщений: 1,278
Записей в блоге: 2
Pylypko9, что должен метод делать? Помечен он, как String, а возвращать должен элементы листа? Какие элементы?
Регистрация: 26.03.2011
Сообщений: 19
Сообщение было отмечено Pylypko9 как решение
Решение
public List
Возвращаешь значение, например, таким образом
List
return somevar;
TheGreatCornholio
1252 / 730 / 285
Регистрация: 30.07.2015
Сообщений: 2,407
Сообщение от Pylypko9
как сделать return елементов List
Бессмыслица какая то, выражайтесь по человечески.
Судя по коду, примерно так наверно.
1 2 3 4
public String assem(Liststring> element) { return string.Join(" ", element); }
Как вернуть список классов List в C#?
то есть id и name. Это нужно передавать как лист классов. Вот, что пока есть:
public class MLandl < public static class MainLand < public int id; // id материка public int id_country; // id страны public string name; // название страны public string data_osn; // дата основания public string data_ras; // дата распада >public static MainLand GetCountryList(string id) < // возврат списка стран (лист классов) // запрос к БД >>
В Google никак не наткнусь на то, что требуется. Буду рад, если поищете за меня, но лучше, если поможете разобраться 🙂
- Вопрос задан более трёх лет назад
- 6109 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 4
Во-первых, разберитесь с терминологией. Судя по вашим репликам, вам надо возвращать не «список классов», а «список экземпляров класса MainLand».
Во-вторых, в чем вообще проблема? Нужный возвращаемый тип — это List, IEnumerable или MainLand[] — выбирайте любой. Или у вас проблема в том, чтобы его создать? Создаются они так:
new List < new MainLand < . >, new MainLand < . >, new MainLand < . >, new MainLand < . >, new MainLand < . >, >;
Как альтернатива, список можно создать пустым и заполнить вызывая метод Add (конструктор списка, кстати, так «за кулисами» и делает).
new[] < new MainLand < . >, new MainLand < . >, new MainLand < . >, new MainLand < . >, new MainLand < . >, >;
Как альтернатива, можно создать список и вызвать у него метод ToArray()
public static IEnumerable GetCountryList(string id) < yield return new MainLand < . >; yield return new MainLand < . >; yield return new MainLand < . >; yield return new MainLand < . >; yield return new MainLand < . >; >
Еще можно просто создать список или массив — они оба являются перечислениями.
Или у вас проблема в обращении к базе данных? Но тогда и надо задавать вопрос про базу данных, а не про список.
Ну и совет: найдите хоть какой-нибудь учебник по C#! Вы же задаете сейчас вопрос, который в любом учебнике описан. Неужели задать вопрос и три дня ждать ответа проще, чем за эти три дня найти ответ в учебнике?
Возврат объекта List из метода
Как правильно возвращать объект List из метода? Если просто сделать List выходным параметром, не получится ли операция слишком тяжелой за счет копирования значений локальной переменной метода наружу?
Отслеживать
11 1 1 золотой знак 2 2 серебряных знака 8 8 бронзовых знаков
задан 4 мар 2015 в 6:25
DarkGenius DarkGenius
885 2 2 золотых знака 11 11 серебряных знаков 31 31 бронзовый знак
>Если просто сделать List выходным параметром, не получится ли операция слишком тяжелой за счет копирования значений локальной переменной метода наружу? почему? вы же сами ниже пишете, что экземпляры классов передаются по ссылке (и это действительно так). Соответственно, затраты будут заключаться в копировании адреса, каким бы большим ни был List
4 мар 2015 в 7:12
@DreamChild: Объясните мне механизм, как компилятор понимает, когда локальные объекты надо удалять после завершения метода, а когда не удалять. В С++ память под локальные объекты освобождается, как только поток выполнения выходит из области видимости объекта. А как в C#?
4 мар 2015 в 9:13
@DarkGenius это довольно обширная тема, поэтому советую вам почитать про сборщик мусора (да-да, этим занимается именно сборщик, а не компилятор). Основная идея — пока остаются ссылки на переменную, она остается жива-здорова
4 мар 2015 в 9:28
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Если вы генерируете список внутри некоего метода, то best practices предлагают делать так:
public void DoSomeWork() < ListsomeList = new List(); // fill someList with values int someInt = (new Random).Next(); Dictionary someDict = calc_distribution(someList, someInt); >
Т.е. вы сначала не инициализируете ваш Dictionary нуллом или пустым словарем, т.е. избавляетесь от лишних проверок или переприсваивания.
А вот если вам нужно изменить уже имеющийся словаре someDict, как он указан в моём примере, то имеет смысл передавать его по ссылке в метод. Подробнее почитать можно тут: Передача аргумента по ссылке — ref
Отслеживать
ответ дан 4 мар 2015 в 6:27
2,696 11 11 серебряных знаков 17 17 бронзовых знаков
@Drac5: Разве в C# объекты не передаются по ссылке по умолчанию?
4 мар 2015 в 6:29
Тогда покажите для начала код, чтобы было понятно, что вы делали. Если вы в методе создаете объект List, а затем передаете его выходным параметром, то после копирования экземпляр из метода попадет на первый уровень сборщика мусора.И очень-очень скоро будет очищен. Давайте код, будем говорить конкретно.
4 мар 2015 в 7:08
@Drac5: Вот пример: pastebin.com/Wss8j2pR Правда, здесь возвращается словарь, но суть вопроса не меняется.
4 мар 2015 в 7:54
@DarkGenius, а как вызываете этот метод? Обновил ответ, как я вижу вызов вашего метода. Естественно, заполнение передаваемых параметров за вами.
4 мар 2015 в 8:05
@DarkGenius, someDist будет инициализирован только после того, как метод calc_distribution вернет некоторый список. На этом в данном случае и будет происходить экономия.
4 мар 2015 в 12:01
Лист хранит в себе ссылки на объекты, а не сами объекты. Поэтому каким бы большим у вас лист ни был, копирования локальных переменных «наружу», т.е. создание новых экземпляров-копий не произойдёт, и о производительности в данном случае беспокоиться не стоит.
Если всё же сомневаетесь, попробуйте инициализировать новый лист до вызова вашего метода и передавать его туда в качестве аргумента, а заполнять его уже в методе. При этом возвращать его не обязательно (метод может ничего не возвращать). По завершении метода у вас будет заполненный вашими данными лист.
Отслеживать
11 1 1 золотой знак 2 2 серебряных знака 8 8 бронзовых знаков
ответ дан 4 мар 2015 в 7:29
1,618 2 2 золотых знака 14 14 серебряных знаков 29 29 бронзовых знаков
@Alexey Grebenyukov: Но ведь объекты у нас созданы локально для метода. Когда выполняется присвоение List
4 мар 2015 в 7:52
В лист будут скопированы ссылки на переменные. И я напомню, что объект существует (т.е. не удаляется сборщиком мусора), пока на него существует хотя бы одна ссылка.
Как вернуть list из метода в c
Такая задача. Есть база данных MySQL. Нужно из неё вывести несколько значений которые соответствуют запросу. Это может быть от 1го до n.
Потом это нужно обработать дальше. Как лучше сделать я не знаю.
Есть идея создать список (List) из массива стринг (string[]) c различными полями. При вызове функции передать этот список и заполнить его данными из ДБ. Но вот не знаю как вернуть его назад?
такое не прокатывает
public List[] readQuery (string query, List daten)
Я понимаю что это велосипед который давно изобретен, но нет опыта и практики. Может кто подскажет хорошую статью по работе с MySQL на с#