универсальный объект c # [] добавление другого элемента

#c# #.net #object

#c# #.net #объект

Вопрос:

У меня есть

 Object[] a = {"steve","jill"};
  

Как мне добавить еще один элемент?

 a[2]="new york"; //doesn't work of course
  

не существует a.Add("new york"); или a.Push("new york");

Комментарии:

1. Вы не можете изменить размер массива после его создания. Если вам нужен динамический размер, используйте вместо этого список<object> .

2. Прочитайте это с классными примерами — dotnetperls.com/list

Ответ №1:

Если вы настаиваете на использовании массива в качестве коллекции, вам придется Resize :

   Array.Resize(ref a, a.Length   1);

  a[a.Length - 1] = "new york";
  

Однако гораздо лучшим подходом является использование List<T> , специально разработанного для этой цели:

   List<object> a = new List<object>()
    { "steve", "jill" };

  a.Add("new york");
  

Комментарии:

1. ПРИМЕЧАНИЕ: Внутри List<T> находится массив, размер которого при необходимости динамически изменяется. Вопрос в том, должен ли op использовать List<object> или ArrayList

2. @ja72: ArrayList является устаревшим , вот почему List<Object> предпочтительнее

Ответ №2:

 Object[] a = { "steve", "jill" };
Object[] b = new Object[3];
a.CopyTo(b, 0);
a= b;
a[2] = "new york";
  

Комментарии:

1. Я согласен с использованием списка, но это код примерно 10-летней давности. И Intellisence не показывает мне, что у меня есть изменение размера.

2. пользователь5903880 на самом деле это лучший (наиболее эффективный) ответ, потому что Array.Resize делает что-то подобное, но с большими накладными расходами referencesource.microsoft.com/#mscorlib/system /…

3. С тех пор, как мне приходилось делать что-либо подобное, было трудно вспомнить, что мне действительно нужно было сделать, это изменить размер массива.

Ответ №3:

Ленивая неэффективная версия:

 Object[] a = {"steve","jill"};

a = a.Concat(new Object[]{"new york"}).ToArray(); // add

a = new Object[]{"new york"}.Concat(a).ToArray(); // insert