Edward Barrier III
Edward Barrier III

Reputation: 11

c# Printing List Items in a class

Good afternoon,

I'm trying to refresh my knowledge on c# a bit and I have a challenge to create a class called Library, with a property of List books. I have another class called Books that gets the title, author, and number of pages. The goal here is to add books from the other class to the library.

I added my books from my books class into the List from the library. I just can't seem to get it printed out in the console due to an error I will add to the bottom. I know how to print out list items normally but not for this.

Class for Book

    public class Book
{
    //This Class doesn't require fields

    //properties
    public string Title { get; set; }
    public string Author { get; set; }
    public int NumberOfPages { get; set; }

    //Constructors
    public Book() { }

    public Book(string title, string author, int numberOfPages)
    {
        Title = title;
        Author = author;
        NumberOfPages = numberOfPages;
    }

    public override string ToString()
    {
        return $"Title: {Title}\n" +
            $"Author: {Author}\n" +
            $"Number of pages: {NumberOfPages}";
    }
}

Class for Library

    public class Library
{
    //This class has no fields

    //Properties
    public List<Book> Books { get; set; }
    public string LibraryName { get; set; }
    public string StreetAddress { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }

    //Constructors
    public Library() { }

    public Library(List<Book> books, string libraryName, string streetAddress, string city, string state, string zip)
    {
        Books = books;
        LibraryName = libraryName;
        StreetAddress = streetAddress;
        City = city;
        State = state;
        Zip = zip;
    }

    public override string ToString()
    {
        return $"{Books}\n\n" +
            $"Library Name: {LibraryName}\n" +
            $"Address: {StreetAddress}, {City}, {State} {Zip}";
    }
}

Method to print out class to console

    void Library()
    {
        List<Book> books = new List<Book>();
        books.Add(lordLoss);
        books.Add(harryPotter);
        Library kansasCity = new Library(books, "Kansas City Library", "3242 E 24th St", "Kansas City", "MO", "64115");
    
        Console.WriteLine(books);
}

Error Code I'm Getting

System.Collections.Generic.List`1[ClassLibrary.Book]

Upvotes: 1

Views: 600

Answers (2)

SpaceBeeGaming
SpaceBeeGaming

Reputation: 236

You'll have to iterate over the list and print each book separately.

With for loop:

for (int i = 0; i < books.Count; i++)
{
     Book book = books[I];
     Console.WriteLine(book);
}

With foreach loop:

foreach (Book book in books)
{
     Console.WriteLine(book);
}

With List.ForEach:

books.ForEach(book => Console.WriteLine(book));

Upvotes: 2

Edward Barrier III
Edward Barrier III

Reputation: 11

I figured out the answer. You can just put the foreach inside of the ToString() area.

public override string ToString()
    {
        string booksInLibrary = "";

        foreach (Book b in Books)
        {
            booksInLibrary += b + "\n";
        }

        return $"Books: \n {booksInLibrary}" +
            $"Library Name: {LibraryName}\n" +
            $"Address: {StreetAddress}, {City}, {State} {Zip}";
    }

Upvotes: 0

Related Questions