C # как зациклить списки классов, сгенерированные json2csharp - PullRequest
0 голосов
/ 08 сентября 2018

После использования 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; }
    }

1 Ответ

0 голосов
/ 08 сентября 2018

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

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...