Вывод двух коллекций в консоль c#

278
18 февраля 2017, 04:18

Добрый день!

У меня есть две коллекции IEnumerable<Repo> и List<string>.
Есть два метода, которые возвращают эти коллекции.

public IEnumerable<Repo> CollectionWithUrl()
{   
    StreamReader jsonfile = new StreamReader("file.json");
    string json = jsonfile.ReadToEnd();
    IEnumerable<Repo> repos = JsonConvert.DeserializeObject<IEnumerable<Repo>>(json);
    return repos;
}
public List<string> CollectionWithHash()
{
    Repo CollWU = new Repo();
    var CollWithURL = CollWU.CollectionWithUrl();
    List<string> listHashRepo = new List<string>();
    foreach (var item in CollWithURL)
    {
        listHashRepo.Add(item.GetHash(item.url.ToString()));
    }
    return listHashRepo;
}

А я пытаюсь их вывести в консоль таким способом:

Repo printhash = new Repo();
var printhashvar = printhash.CollectionWithHash();
Repo printurl = new Repo();
var printurlvar = printurl.CollectionWithUrl();
Console.WriteLine("CollectionWithHASH");
Console.WriteLine(printhashvar);
Console.WriteLine();
Console.WriteLine("CollectionWithURL");
Console.WriteLine(printurlvar);
Console.WriteLine();

И они не выводяться в консоле. Хотя в первой коллекции должны быть хэш-коды, а во второй ссылки! А пишется в консоле:

CollectionWithHASH
System.Collections.Generic.List'1[ConsoleAppOOP.Repo]

CollectionWithURL
System.Collections.Generic.List'1[System.String]

Помогите решить проблему. Спасибо!

Answer 1

Согласно Вашему коду, необходимо немного его модифицировать, вот так:

Repo printhash = new Repo();
var printhashvar = printhash.CollectionWithHash();
Repo printurl = new Repo();
var printurlvar = printurl.CollectionWithUrl();
Console.WriteLine("CollectionWithHASH");
printhashvar.ForEach(x => Console.WriteLine(x));
Console.WriteLine();
Console.WriteLine("CollectionWithURL");
printurlvar.ToList().ForEach(x => Console.WriteLine(x./*к примеру имя поля из Repo*/));
Console.WriteLine();

К примеру, если у Вас в классе Repo есть поле Description, то будет вот так:

printurlvar.ToList().ForEach(x => Console.WriteLine(x.Description));

Внутрь Console.WriteLine передавать строку, а не коллекцию. И для коллекции IEnumerable сделать .ToList(), чтобы вызвать .ForEach(.

Как правильно заметил @VladD, лучше не использовать ToList для потенциально большой коллекции, а выводить через foreach, in. Я с этим согласен поэтому просто с помощью foreach, in делать перебор коллекции и выводить вот так:

foreach (var el in printurlvar)
{
    Console.WriteLine(el. /*ну и выводимое поле*/);
    // если нужно вывести несколько элементов, то вот так:
    Console.WriteLine($"Имя:'{el.Name}' Описание:'{el.Description}'");
    // при наличии "Name" и "Description" в классе "Repo" для примера
    // либо следующим способом:
    Console.WriteLine(string.Format("Имя:'{0}' Описание:'{1}'", el.Name, el.Description));
    // вариантов достаточно много
}

Почитать для ознакомления можно это:

  1. foreach, in (Справочник по C#)
  2. Метод List.ForEach (Action)
READ ALSO
Сервер-посредник не отдает контент

Сервер-посредник не отдает контент

Имеется 2 сервераОдин главный, другой посредник

312
Базы данных в crm long page (однастроничников)

Базы данных в crm long page (однастроничников)

Проект не коммерческий число пользователей около 100 может меньшеСильно не ругайте если что то не указал

298
Как поставить логотип в phpbb версии 3.2

Как поставить логотип в phpbb версии 3.2

Помогите пожалуйста как поставить свой логотип на phpbb форуме? Заранее спасибо!!!

456