2015-05-01 3 views
-1

Смотреть .net скрипку ссылку https://dotnetfiddle.net/E4eCWlПользовательский тип ArrayList с IEnumerator

У меня есть домашнее задание на использование ArrayList типа книги, так в то время как я знаю, что List<T> будет правильным способом решать вопрос, что нужно использовать ArrayList как это является частью задания

так использовали

var books = new ArrayList<Book> {new Book("Moby Dick", 254)}; 

так голый со мной здесь, мое понимание здесь является то, что, как только я добавить пользовательский тип книги в Arraylist Я создаю собственный класс, как Resharper имеет руль d я создаю новый класс для размещения добавления книги, поэтому добавлен новый класс, но теперь я застрял, поскольку я понятия не имею, как реализовать метод 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

Вам сказали использовать * existing * (non-generic) ArrayList или создать свой собственный? Это звучит как очень странное задание ... –

+0

ArrayList не является общим классом, поэтому вы можете использовать его следующим образом: var books = new ArrayList {new Book («Moby Dick», 254)}; –

ответ

0

Я подозреваю, что вы предназначены для использования System.Collections.ArrayList, которая не является родовым - так что вам придется:

var books = new ArrayList { new Book("Moby Dick", 254) }; 

Конечно, используя необщую коллекцию, как правило, плохая идея, и если не назначение конкретно указывает на «несколько устаревшие» коллекции, я бы поставил под сомнение его полезность. (В принципе, похоже, что это задание может быть просто очень старый и в больной необходимости обновления. Если вы можете дать отзыв об этом, сделайте это!)

+0

Возможно, учитель еще не представил дженерики , и предпочитает показывать старый способ, чтобы продемонстрировать, насколько новый способ лучше, как только ученики узнают дженерики. –

+0

@PaoloCosta: * Возможно * - но я бы поставил под сомнение его полезность, если честно. –

+0

Спасибо, Джон, я думаю, ваше право на использование не общего арраиста, но теперь я как бы любопытен, можно ли использовать аррайалист таким образом или просто путать проблему? Очевидно, что это работает, когда я отлаживаю проблему, я могу перейти к добавлению, а затем исключение будет выбрано так теперь, просто попробую посмотреть, смогу ли я получить пример для работы –

0

ArrayList представляет собой набор из .NET 1.0 и 1.1 дней (долгое, долгое время назад как Star Wars интро .. .).

Таким образом, ArrayList было введено до generics и это не общая коллекция.

Он отличается от 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]; 

BTW, как я уже говорил в первом пункте, это класс, устарел долгое долгое долгое долгое долгое (...) время, и фактический код больше не должен его использовать. Вместо этого вы должны использовать List<T> (или любой другой общий список в пространстве имен System.Collections.Generic).

+0

Спасибо Матиас, что имеет смысл, я полагаю, я просто стараюсь быть упрямым и пытаюсь выяснить, как получить C#, чтобы фактически обработать добавление, что мне нужно добавить к методу, чтобы добраться до работы –

+0

@SimonG Я не понимаю, что вы хотите достичь вообще ... Вы хотите реализовать коллекцию с нуля, или что? –

+0

Resharper создал внутреннюю пустоту Add (Book book) { throw new NotImplementedException(); } Так что да, я думаю, что я хочу реализовать коллекцию или пользовательскую реализацию, я полагаю. Спасибо –

Смежные вопросы