C# как зациклить списки сгенерированных классов json2csharp

После использования http://json2csharp.com/ у меня появилась эта структура, и я пытаюсь перебрать все книги, однако я не знаю, как, и я думаю, что есть лучший способ получить каждый список книг вручную, например, этот BookStores[0].Prism.Books

Короче я хочу перебрать каждый List<Book>

    public class Book
    {
        public string name { get; set; }
        public int pages { get; set; }
        public double rating { get; set; }
        public bool available { get; set; }
    }

    public class Prism
    {
        public List<Book> Books { get; set; }
    }

    public class Paragraphia
    {
        public List<Book> Books { get; set; }
    }


    public class BookStore
    {
        public Prism Prism { get; set; }
        public Paragraphia Paragraphia { get; set; }
    }

    public class RootObject
    {
        public List<BookStore> BookStores { get; set; }
    }

В идеале ваш вопрос должен заключаться в том, как использовать циклы со списком в C#? - stackoverflow.com/questions/18863187/…

MBB 08.09.2018 16:27

Нет, посмотрите, у класса BookStore есть члены Prism и Paragraphia, и у этих членов есть свои члены, которые являются списками. Как мне зациклить их, не обращаясь к каждому напрямую с точкой

padolebala 08.09.2018 16:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
76
1

Ответы 1

Насчет следующей реализации.

public class Book
{
    public string name { get; set; }
    public int pages { get; set; }
    public double rating { get; set; }
    public bool available { get; set; }
}

public enum BookCategory
{
    Prism,
    Paragraphia
}

public class BookStore
{
    public Dictionary<BookCategory, List<Book>> Books { get; set; }
}

А затем используйте его следующим образом:

var bookStore = new BookStore();
bookStore.Books = new Dictionary<BookCategory, List<Book>>();

var paragrapiaBooks = new List<Book>();
paragrapiaBooks.Add(new Book{name = "Paragrapia book 1"});
paragrapiaBooks.Add(new Book{name = "Paragrapia book 2"});
bookStore.Books[BookCategory.Paragraphia] = paragrapiaBooks;

var prismBooks = new List<Book>();
prismBooks.Add(new Book{name = "Prism book 1"});
prismBooks.Add(new Book{name = "Prism book 2"});
bookStore.Books[BookCategory.Prism] = prismBooks;

foreach (var bookCategory in bookStore.Books)
{
    foreach (var book in bookCategory.Value)
    {
        Console.WriteLine(book.name);
    }
}
Console.ReadLine();

Таким образом, ваша реализация также становится более гибкой, вам не нужно добавлять новое свойство, когда вам нужна новая категория книги, вам просто нужно добавить новое значение Enum. Вместо Enum вы также можете, например, использовать String.

================================================== ====================

Но я думаю, что следующее решение лучше, добавив свойство category к классу Book, потому что на самом деле это свойство книги, а не коллекции книг. Научно-фантастический роман останется научной фантастикой, даже если его положить на книжную полку, полную поваренных книг.

public class Book
{
    public string name { get; set; }
    public int pages { get; set; }
    public string category { get; set; }
    public double rating { get; set; }
    public bool available { get; set; }
}

public class BookStore
{
    public List<Book> Books { get; set; }
}

А затем используйте его следующим образом:

var bookStore = new BookStore();
bookStore.Books = new List<Book>();
bookStore.Books.Add(new Book { name = "Paragrapia book 1", category = "Paragrapia" });
bookStore.Books.Add(new Book { name = "Paragrapia book 2", category = "Paragrapia" });
bookStore.Books.Add(new Book { name = "Prism book 1", category = "Prism" });
bookStore.Books.Add(new Book { name = "Prism book 2", category = "Prism" });

Console.WriteLine("ONLY PRISM BOOKS:");
foreach (var book in bookStore.Books.Where(b => b.category == "Prism"))
{
    Console.WriteLine(book.name);
}

Console.WriteLine("\r\nALL BOOKS:");
foreach (var book in bookStore.Books)
{
    Console.WriteLine(book.name);
}
Console.ReadLine();

Нет, ты меня не понял. Как мне просмотреть списки участников Prism и Paragraphia без прямого доступа к ним, как вы показали. У меня их более двух, и вы предлагаете, чтобы для каждого я был книжным магазином. Книжным магазином Prism. Книжным магазином Литературы.

padolebala 08.09.2018 16:57

Хорошо, это действительно другой вопрос. Я обновлю ответ.

Bouke 08.09.2018 17:43

@padolebala: Это вам поможет?

Bouke 11.09.2018 19:56

Другие вопросы по теме