изменить размер массива - PullRequest
52 голосов
/ 30 января 2011

Можно ли изменить размер массива после объявления? Если нет, есть ли альтернатива массивам?
Я не хочу создавать массив размером 1000, но я не знаю размер массива при его создании.

Ответы [ 15 ]

1 голос
/ 06 декабря 2016

Используйте список (где T - любой тип или объект), когда вы хотите добавить / удалить данные, поскольку изменение размеров массивов стоит дорого.Вы можете прочитать больше о Массивы, которые считаются несколько вредными , тогда как Список может быть добавлен в Новые записи, которые могут быть добавлены в конец.Он корректирует свой размер по мере необходимости.

Список можно инициализировать следующими способами

Использование инициализатора коллекции.

List<string> list1 = new List<string>()
{
    "carrot",
    "fox",
    "explorer"
};

Использование ключевого слова var с инициализатором коллекции.

var list2 = new List<string>()
{
    "carrot",
    "fox",
    "explorer"
};

Использованиеновый массив в качестве параметра.

string[] array = { "carrot", "fox", "explorer" };
List<string> list3 = new List<string>(array);

Использование емкости в конструкторе и присвоение.

List<string> list4 = new List<string>(3);
list4.Add(null); // Add empty references. (Not Recommended)
list4.Add(null);
list4.Add(null);
list4[0] = "carrot"; // Assign those references.
list4[1] = "fox";
list4[2] = "explorer";

Использование метода Add для каждого элемента.

List<string> list5 = new List<string>();
list5.Add("carrot");
list5.Add("fox");
list5.Add("explorer");

Таким образом, для объектаСписок вы можете выделить и назначить свойства объектов, встроенных в список инициализации.Инициализаторы объектов и инициализаторы коллекций имеют сходный синтаксис.

class Test
{
    public int A { get; set; }
    public string B { get; set; }
}

Инициализация списка с инициализатором коллекции.

List<Test> list1 = new List<Test>()
{
    new Test(){ A = 1, B = "Jessica"},
    new Test(){ A = 2, B = "Mandy"}
};

Инициализация списка с новыми объектами.

List<Test> list2 = new List<Test>();
list2.Add(new Test() { A = 3, B = "Sarah" });
list2.Add(new Test() { A = 4, B = "Melanie" });
0 голосов
/ 28 февраля 2019

Если вам действительно нужно вернуть его в массив, я считаю, что проще всего преобразовать array в list, разверните список и затем преобразовайте его обратно в array.

        string[] myArray = new string[1] {"Element One"};
        // Convert it to a list
        List<string> resizeList = myArray.ToList();
        // Add some elements
        resizeList.Add("Element Two");
        // Back to an array
        myArray = resizeList.ToArray();
        // myArray has grown to two elements.
0 голосов
/ 25 сентября 2018

Если вы не можете использовать Array.Reset (переменная не является локальной), тогда Concat & ToArray помогает:

anObject.anArray.Concat(new string[] { newArrayItem }).ToArray();
0 голосов
/ 12 декабря 2017

Это помогло мне создать динамический массив из массива классов.

var s = 0;
var songWriters = new SongWriterDetails[1];
foreach (var contributor in Contributors)
{
    Array.Resize(ref songWriters, s++);
    songWriters[s] = new SongWriterDetails();
    songWriters[s].DisplayName = contributor.Name;
    songWriters[s].PartyId = contributor.Id;
    s++;
}
0 голосов
/ 01 февраля 2011

Использовать общий список (System.Collections.Generic.List).

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