Объекты C # в arrayLists - PullRequest
       5

Объекты C # в arrayLists

5 голосов
/ 30 июля 2010

Я работаю с ArrayList в C # и мне интересно, как я могу добавить объекты в ArrayList и затем извлечь из него значения?

Короче говоря, как я могу добавлять, удалять, редактировать и читать из ArrayList, содержащего объекты классов?

Благодарю за помощь!

Ответы [ 4 ]

27 голосов
/ 30 июля 2010

Если вы не находитесь в ситуации, когда вы должны использовать .NET 1.0 / 1.1 или вам необходимо взаимодействовать с устаревшим кодом, который использует ArrayList - вам действительно следует избегать использования ArrayLists в новом коде. Вместо этого используйте универсальный тип коллекции List<>.

Операции добавления, удаления и замены элемента в List<T> довольно просты.

Допустим, у вас есть гипотетический тип Animal, экземпляры которого вы будете хранить в списке:

Animal dog = new Animal("dog");
Animal cat = new Animal("cat");

List<Animal> animalList = new List<Animal>();

// example of adding items to the list
animalList.Add( dog );
animalList.Add( cat );

// example of removing items form the list
animalList.Remove( cat );

// example of replacing an item at a given position
animalList[0] = new Animal("giraffe");

Публичные интерфейсы для List<T> и ArrayList на самом деле очень похожи. Основное отличие состоит в том, что ArrayList может хранить только ссылки object, так как он был реализован раньше, чем .NET поддерживал генерики.

ArrayList listOfObjects = new ArrayList();
int myAge = 207;
listOfObjects.Add( (object)myAge );

В приведенном выше примере вы ДОЛЖНЫ приводить типы, такие как int (, которые являются типами значений в .NET ), к объекту. Это приводит к преобразованию в бокс - который копирует тип значения int в новое место в куче и передает его в ArrayList. Преобразования в боксы , являются одним из недостатков использования ArrayList - List<T>, избегая этого, поскольку является универсальным классом . Другая проблема заключается в том, что ArrayList не мешает вам смешивать разные типы в списке вместе. Например:

listOfObjects.Add( (object)myAge );
listOfObjects.Add( "Hello World" );

оба разрешены. Однако при доступе к элементам ArrayList вы должны знать , какой тип вы пытаетесь получить. Это делает ArrayList более хрупким как тип коллекции, потому что вызывающая сторона должна написать код, чтобы либо защитить себя от произвольных типов, хранящихся в ArrayList, либо использовать проверки типов отражения и времени выполнения для преобразования сохраняемых значений. List<T> позволяет избежать обеих этих проблем, позволяя компилятору проверять, что в коллекции хранятся только подходящие типы (те, которые соответствуют параметру типа T в List<T>).

Существует гораздо больше, что можно написать о взаимодействии с коллекциями - и это действительно так. Вот ссылка только на одну из множества замечательных книг по этой теме. Мой совет: прежде чем вы начнете писать код в .NET / C #, вам следует потратить время на ознакомление с основными понятиями языка и системы типов C # - что такое ссылочные и ценностные типы. Какие примитивы. Какие дженерики. и т. д. Это поможет гарантировать, что когда вы начинаете писать код, код делает то, что вам нужно. C # имеет сложную и богатую систему типов, а также обширную библиотеку классов инфраструктуры. Важно хорошо разбираться в основных аспектах языка, прежде чем вы слишком углубитесь в написание реального кода. Примеры, подобные тем, что я показываю выше, покажут вам лишь далеко - и они уже вводят множество языковых концепций: переменные, конструкторы, обобщения, преобразования в бокс и т. Д.

2 голосов
/ 30 июля 2010

Во-первых, лучше использовать List, а не ArrayList в C #.Например, если вам нужен список строк:

List<String> myList = new List<String>();

или

var myList = new List<String>();

Тогда методы будут похожими, например

myList.Add("bla");
var test = myList[0];
0 голосов
/ 07 сентября 2013

я использую подобный метод, но я не могу его использовать .. из-за того, что объект является полем, нельзя использовать как тип, поле нельзя использовать как тип ..: / im интересно, я смог использовать его в Java даже с объектом ArrayList ...это мой объект, но я не могу его использовать: (

List lists = new List ();

person p2 = new person("Hammad", "Lahore", 1, 123);
person p3 = new person("adnan", "Lahore", 1, 123);
person p4 = new person("qamar", "Lahore", 1, 123);
lists.Add(p2);
0 голосов
/ 30 июля 2010

вы можете сделать это так же, как если бы вы работали со списком или коллекцией (попробуйте использовать метод .add).

также вы можете прочитать эту ссылку MSDN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...