如何使用方法将对象添加到私有列表?

How to add objects to a private list with a method?

您可以看到我创建的列表是私有的,我希望能够向列表中添加对象以及通过方法 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");
        }
    }
}

循环不起作用,因为 "An object reference is required for the non-static field, method, or property" 引用了列表。

如果你不想在书上使用静态 collection 这样做:

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");
        }
    }
}

问题是您的 List-instance 是 non-static,而您的方法是。您要么必须将 List 更改为静态,要么将方法更改为非静态。按照良好的 OO 设计,我建议您从方法中删除静态修饰符。我还对您的列表应用了只读修饰符并将其更改为 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");
        }
    }
}

如果你想使用静态方法,你可以试试这个

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);
        }
    }
}