请参阅.net小提琴链接https://dotnetfiddle.net/E4eCWl
我有一个家庭作业,使用Book类型的ArrayList,所以虽然我知道List<T>
是处理问题的正确方法,但我需要使用ArrayList,因为这是作业的一部分
如此使用
var books = new ArrayList<Book> {new Book("Moby Dick", 254)};
我的理解是,一旦我将自定义类型Book添加到Arraylist我正在创建一个自定义类,因为Resharper帮助我创建了一个新类以适应添加的书,因此添加了一个新类,但是现在我被卡住了,因为我不知道如何实现Add方法或者如何使用GetEnumerator ...
任何提示或网站,我可以去帮助我,或者让我走错路,开始创建类型。
自定义图书类
class Book
{
public string Title { get; set; }
public int NumberOfPages { get; set; }
public Book(string title, int pages)
{
Title = title;
NumberOfPages = pages;
}
}
生成的类
class ArrayList<T> : IEnumerable
{
internal void Add(Book book)
{
throw new NotImplementedException();
}
public IEnumerator GetEnumerator()
{
throw new NotImplementedException();
}
}
答案 0 :(得分:0)
ArrayList
是一个来自.NET 1.0和1.1天的集合(很久很久以前就像星球大战介绍...... )。
因此,在{em> generics 之前引入了ArrayList
,它不是通用集合。
它与List<T>
的不同之处在于,集合项不是作为某种具体类型而是作为object
键入的。也就是说,您可以向ArrayList
添加任何类型的对象。
ArrayList list = new ArrayList();
list.Add(new Pear());
list.Add(new Apple());
此外,当您需要获取某个项目时,您需要再次向下转换到具体类型:
// list[0] will return the pear typed as System.Object
Pear pear = (Pear)list[0];
顺便说一句,正如我在第一段中所说的那样,它是一个已经过时了很长很长很久很久(......)的类,实际的代码不应再使用它了。您需要使用List<T>
(或System.Collections.Generic
命名空间内的任何其他通用列表)。
答案 1 :(得分:0)
我怀疑你打算使用非通用的System.Collections.ArrayList
- 所以你有:
var books = new ArrayList { new Book("Moby Dick", 254) };
当然,使用非泛型集合通常是一个坏主意,除非赋值专门针对“有些遗留”的集合提出一个观点,否则我会质疑它的用处。 (基本上,听起来这个任务可能只是非常旧并且需要更新。如果你可以提供反馈,请这样做!)