Передача массива между формами и управление массивами - PullRequest
2 голосов
/ 17 декабря 2010

Я хочу перевести массив из Form1 в Form2, затем в Form2 добавить некоторые значения в массив.При нажатии кнопки Form1 я поместил этот код:

        int[] arrayOfInt = new int[4];
        arrayOfInt[0] = 19;
        arrayOfInt[1] = 12;
        Form2 frm2 = new Form2();
        frm2.TakeThis(arrayOfInt);
        frm2.Show();

В форме 2 я создал TakeThis(int[]), который ловит значения из form1 и отображает значения массива на метке.Теперь я не могу понять, как добавить некоторые значения в массив.Например, arrayOfInt[2] и arrayOfInt[3] и отправить в форму 3.

Редактировать :

Я решил использовать Список для хранения своих данных, но в конце я долженпреобразовать список в массив, потому что я выполняю некоторые отчетные и математические операции с данными.

Этот пример отличается от примера выше.В этом хранилище все входные данные из текстовых полей, списков в списке.В конце мне нужно преобразовать список в массив.

Что я сделал, я создал новый глобальный класс:

static class List{

   static List<string> list;

   public static void NewList(){
   list=new List<string>();
   }

   public  static void Save(string value){
   list.Add(value);
   }

   public static void Display(){
   foreach(var value in list){
   MessageBox.Show(value);
   }
   }

}

Данные вставляются между формами,

List.save(some_strings);
 ...

но в конце мне нужно преобразовать список в массив.Я гуглил и нахожу функцию ToArray(), но я не знаю, как использовать в моем коде.Я пробовал со свойствами, но я не мог сделать преобразование.Пожалуйста, помогите.

Edit2 Я нашел решение.В глобальном статическом классе List я создал метод, который возвращает список строк:

public static List<string> GetList(){
              return list;
               }

Затем я создал новый пустой список строк в Form2.Скопировал старый список в новый список и преобразовал его в массив.

List<string> li=new List<string>();
li=List.GetList();
string[] temp=li.ToArray();

Ответы [ 4 ]

4 голосов
/ 17 декабря 2010

Не используйте массивы, если вам нужна структура данных, в которую нужно добавлять элементы.

Используйте общую коллекцию, такую ​​как List<T>.

В вашем случае список целых чисел будет List<int>.

IList<int> listOfInt = new List<int>();
listOfInt.Add(19);
listOfInt.Add(12);
Form2 frm2 = new Form2();
frm2.TakeThis(listOfInt);
frm2.Show();

При включении Form2 ваша функция TakeThis будет выглядеть следующим образом:

public voidTakeThis(IList<int> listOfInt)
{
  listOfInt.Add(34);
}

Это также будет работать при передаче списка в другую форму, поскольку List является ссылочным типом, тогда как массивы являются типами значений. Если вы не знаете, что это значит, см. эту статью .

3 голосов
/ 17 декабря 2010

Вам нужно будет использовать ref аргумент для frm2.TakeThis() метода:

Вот статья MSDN: Передача массивов с использованием ref и out (Руководство по программированию в C #) .

void TakeThis(ref Int32[] array)
{
    // Change array
}

и используйте как:

frm2.TakeThis(ref arrayOfInt);

Массивы необходимо передавать по ссылке, если вы хотите сохранить изменения в них.

Если вы не должны использовать Array использовать Collection как System.Collections.Generic.List<T>.

3 голосов
/ 17 декабря 2010

Скорее используйте ArrayList или даже лучше IList<T>.Массивы не могут быть изменены в C #

1 голос
/ 17 декабря 2010

Используйте List<Int> и используйте метод oList.Add(item) для добавления элементов, так как массив зафиксирован в длине (вы уже указали его размер во время инициализации) Но если вы хотите использовать массив любой ценой, то создайте логику, чтобы создать новый массив до размера старого + новый добавленный элемент и вернуть его.

ОБНОВЛЕНО Я полагаю, что вы столкнулись с проблемой, потому что взяли взамен List of String или Int.

            List<int> oIntList = new List<int>();
            oIntList.Add(1);
            oIntList.Add(3);
            oIntList.Add(4);
            oIntList.Add(5);

            int[] oIntArr = oIntList.ToArray();
...