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

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Автор темы
Друг
8,769
11,213
Почему не добавляется значение в массив?
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

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Автор темы
Друг
8,769
11,213
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