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