Как добавить объекты в личный список с помощью метода? - PullRequest
0 голосов
/ 27 мая 2019

Вы можете видеть, что созданный мной список является личным, и я хочу иметь возможность добавлять объекты в список, а также показывать пользователю список с помощью методов AddBook () и ShowBooks ().

public class Library
{
    private List<Book> Books = new List<Book>();       

    public static void AddBook()
    {
    }

    public static void ShowBooks()
    {
        foreach (Book item in Books)  
        //This foreach-loop doesn't work since its a private list.
        {
            Console.WriteLine("Books found");
        }
    }
}

Цикл не работает, так как «Ссылка на объект требуется для нестатического поля, метода или свойства», ссылающегося на список.

Ответы [ 3 ]

0 голосов
/ 27 мая 2019

Проблема в том, что ваш экземпляр List не является статичным, в то время как ваши методы. Вы должны либо изменить свой список, чтобы он был статическим, либо вы должны использовать методы, не являющиеся статичными. Следуя хорошему OO Design, я бы предложил вам удалить статический модификатор из ваших методов. Я также применил модификатор readonly к вашему списку и изменил его на ICollection, поскольку вам не требуется индексированный доступ. А также применил некоторые распространенные шаблоны именования.

public class Library
{
    private readonly ICollection<Book> _books = new List<Book>();       


    public void AddBook(Book book)
    {
        _books.Add(book);
    }

    public void ShowBooks()
    {
        foreach (Book item in _books)  
        {
            Console.WriteLine("Books found");
        }
    }
}
0 голосов
/ 27 мая 2019

если вы хотите использовать статические методы, вы можете попробовать это

using System;

с использованием System.Collections.Generic;

public class Program
{
    public static void Main()
    {

        Library.AddBook(new Book(){name = "test"});
        Library.AddBook(new Book(){name = "test1"});

        Library.ShowBooks();
    }
}

public class Book
{
    public string name;
}

public static class Library
{
    private static List<Book> Books = new List<Book>();

    public static void AddBook(Book b1)
    {
        Books.Add(b1);
    }

    public static void ShowBooks()
    {
        foreach (Book item in Books)  
        //This foreach-loop doesn't work since its a private list.
        {
            Console.WriteLine(item.name);
        }
    }
}

без статических методов вы можете попробовать это

using System;
using System.Collections.Generic;


public class Program
{
    public static void Main()
    {
        Library l1 = new Library();
        l1.AddBook(new Book(){name = "test"});
        l1.AddBook(new Book(){name = "test1"});

        l1.ShowBooks();
    }
}


public class Book
{
    public string name;
}

public  class Library
{
    private  List<Book> Books = new List<Book>();

    public  void AddBook(Book b1)
    {
        Books.Add(b1);
    }

    public  void ShowBooks()
    {
        foreach (Book item in Books)  
        //This foreach-loop doesn't work since its a private list.
        {
            Console.WriteLine(item.name);
        }
    }
}
0 голосов
/ 27 мая 2019

Если вы не хотите использовать статическое в коллекции книг, сделайте следующее:

public class Library
{
    private List<Book> Books = new List<Book>();       

    public void AddBook()
    {
    }

    public void ShowBooks()
    {
        var library = new Library();
        foreach (Book item in Books)  
        {
            //This foreach-loop doesn't work since its a private list.
            library.Books.Add(item);
            Console.WriteLine("Books found");
        }
    }
}
...