C# array.Append() не работает

chapo

tg/inst: @moujeek
Автор темы
Всефорумный модератор
9,084
12,092
Почему не добавляется значение в массив?
C#:
string[] saved = { }; // это после public partial class Form1 : MetroFramework.Forms.MetroForm

saved.Append(textBox1.Text); // это в нажатии на кнопку
MessageBox.Show(Convert.ToString(saved.Length));
 
Решение
я уже сделал так, но все ровно спасибо
C#:
        public void arrayAppend(string value)
        {
            List<string> list = new List<string>(saved.ToList());
            list.Add(value);
            saved = list.ToArray();
        }

Почему бы saved не сделать List? А то у тебя получается array => list => list => array
То есть чтоб просто добаить 1 элемент, юзается 4x памяти от уже имеющихся элементов
ну или

C#:
        public void arrayAppend(string value)
        {
            Array.Resize(ref saved, saved.Length + 1);
            saved[saved.Length - 1] = value
        }

Делать ресайз при каждом добавлении тоже не айс, но всяко лучше

kivija3070

Участник
14
10
Почему не добавляется значение в массив?
C#:
string[] saved = { }; // это после public partial class Form1 : MetroFramework.Forms.MetroForm

saved.Append(textBox1.Text); // это в нажатии на кнопку
MessageBox.Show(Convert.ToString(saved.Length));

1) Никогда так не делай, для того где надо что то добавить, юзай лист
2) Функция Append вроде из Linq, так что вернет IEnumerable<string>

3) По идее должно работать так (лень студию запускать):
C#:
string[] saved = { }; // это после public partial class Form1 : MetroFramework.Forms.MetroForm

saved = saved.Append(textBox1.Text).ToArray(); // это в нажатии на кнопку
MessageBox.Show(Convert.ToString(saved.Length));
 

chapo

tg/inst: @moujeek
Автор темы
Всефорумный модератор
9,084
12,092
1) Никогда так не делай, для того где надо что то добавить, юзай лист
2) Функция Append вроде из Linq, так что вернет IEnumerable<string>

3) По идее должно работать так (лень студию запускать):
C#:
string[] saved = { }; // это после public partial class Form1 : MetroFramework.Forms.MetroForm

saved = saved.Append(textBox1.Text).ToArray(); // это в нажатии на кнопку
MessageBox.Show(Convert.ToString(saved.Length));
я уже сделал так, но все ровно спасибо
C#:
        public void arrayAppend(string value)
        {
            List<string> list = new List<string>(saved.ToList());
            list.Add(value);
            saved = list.ToArray();
        }
 

kivija3070

Участник
14
10
я уже сделал так, но все ровно спасибо
C#:
        public void arrayAppend(string value)
        {
            List<string> list = new List<string>(saved.ToList());
            list.Add(value);
            saved = list.ToArray();
        }

Почему бы saved не сделать List? А то у тебя получается array => list => list => array
То есть чтоб просто добаить 1 элемент, юзается 4x памяти от уже имеющихся элементов
ну или

C#:
        public void arrayAppend(string value)
        {
            Array.Resize(ref saved, saved.Length + 1);
            saved[saved.Length - 1] = value
        }

Делать ресайз при каждом добавлении тоже не айс, но всяко лучше
 
  • Вау
Реакции: chapo