После использования 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; }
}
Нет, посмотрите, у класса BookStore есть члены Prism и Paragraphia, и у этих членов есть свои члены, которые являются списками. Как мне зациклить их, не обращаясь к каждому напрямую с точкой





Насчет следующей реализации.
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: Это вам поможет?
В идеале ваш вопрос должен заключаться в том, как использовать циклы со списком в C#? - stackoverflow.com/questions/18863187/…