Работа с коллекциями в C#

Цель занятия

Освоить работу с коллекциями на примере класса ArrayList. Изучить методы этого класса. Создать и разобраться в демонстрационном приложении. Дополнительно см. [9, 17].

Краткие теоретические сведения

Класс ArrayList позволяет хранить объекты разных типов. Мы создадим на его основе внутреннюю базу данных. Эта база данных будет содержать сведения о студентах: имя и группу. Простейший интерфейс с базой данных будет реализован на основе формы (рис. 4.12).

Имеется всего две кнопки: одна (Add) для добавления записи в базу, другая (Find) — для поиска номера группы по имени. Записи будем создавать на основе класса student, объявленного следующим образом:

class Student {

public string name; public int group;

Рис. 4.12. Окно приложения для работы с классом ArrayList

Этот класс содержит два поля: name (имя) и group (номер группы). Обратим внимание на то, что класс ArrayList позволяет хранить объекты разных классов. Это его большое достоинство. Дальше приводим реакцию на нажатие кнопки Add:

private void buttonl_Click(object sender, System.EventArgs e)

Student stud=new    Student(); // Создаем объект

stud.name=textBoxl.Text;

stud.group=Convert.ToInt32(textBox2.Text); myal.Add(stud); // Добавляем объект в коллекцию MessageBox.Show("Ready");

Видим, что сначала создается объект типа student. Затем его поля name и group получают значения, а затем объект stud добавляется в коллекцию myai, созданную на основе класса ArrayList при начальной загрузке формы:

private void Forml_Load(object sender, System.EventArgs e) myal=new ArrayList();

Наконец, по нажатию кнопки Find реализуется следующий код:

private void button2_Click(object sender, System.EventArgs e)

{

int priz=0;

IEnumerator inum=myal.GetEnumerator(); while(inum.MoveNext ())

{

Student studcur=(Student) inum.Current;

String sl=studcur.name.Trim();

String s2=textBoxl.Text.Trim(); if(String.Compare(sl,s2)==0)

{

textBox2.Text=""+studcur.group;

priz=l;

break;

}

continue;

}

if(priz==0)

MessageBox.Show("Not Found");

}

Этот код требует дополнительных разъяснений. Прежде всего, заметим, что поиск в коллекции объектов реализуется путем последовательного перехода к очередному объекту:

while(inum.MoveNext())  { .      .      .      }

Для этого нам необходимо создать переменную класса iEnu- merator:

IEnumerator inum=myal.GetEnumerator();

Свойство current переменной inum дает очередной объект типа student. Затем мы просто проверяем на совпадение имени в текстовом поле textBoxl и значения поля name текущей записи:

String sl=studcur.name.Trim();

String s2=textBoxl.Text.Trim(); if(String.Compare(sl,s2)==0)

Класс ArrayList позволяет выполнить вставку объекта ob в указанную позицию i командой:

myal.Insert(int i, Object ob);

Очистка списка выполняется командой

myal.Clear();

Удаление объекта на позиции i из списка реализует команда

myal.RemoveAt(int i);

Позицию объекта оь в списке определяет команда:

int i = myal.IndexOf(Ob);

Если объекта в списке нет, то возвращается значение —1. В этих примерахтуа1 является объектом TiinaArrayList.

Теперь приводим полный текст программы (листинг4.18) рассмотренного приложения.

| Листинг 4.18. Работа с ArrayList

using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data;

namespace WindowsApplication5

/// <summary>

/// Summary description for Forml.

/// </summa ry>

public class Forml : System.Windows.Forms.Form

class Student // Объявление класса Student, объекты которого // попадают в ArrayList

public string name; // Поля класса Student public int group;

private ArrayList myal;

// Объявления элементов формы, сделанные системой private System.Windows.Forms.Button buttonl; private System.Windows.Forms.TextBox textBoxl; private System.Windows.Forms.TextBox textBox2; private System.Windows.Forms.Label labell; private System.Windows.Forms.Label label2; private System.Windows.Forms.Button button2;

/// <summary>

/// Required designer variable.

/// </summary>

private System.ComponentModel.Container components = null; public Forml() // Конструктор формы {

//

// Required for Windows Form Designer support //

InitializeComponent();

//

// TODO: Add any constructor code after InitializeComponent // call //

}

/// <summary>

/// Clean up any resources being used.

/// </summary>

protected override void Dispose( bool disposing )

{

if( disposing )

if (components != null)

{ components.Dispose (); }

}

base.Dispose( disposing );

}

#region Windows Form Designer generated code /// <summary>

/// Required method for Designer support – do not modify /// the contents of this method with the code editor.

/// </summary>

private void InitializeComponent() // Код инициализации

// формы, построенный // системой

{

this.buttonl = new System.Windows.Forms.Button(); this.textBoxl = new System.Windows.Forms.TextBox(); this.textBox2 = new System.Windows.Forms.TextBox(); this.labell = new System.Windows.Forms.Label(); this.label2 = new System.Windows.Forms.Label(); this.button2 = new System.Windows.Forms.Button(); this.SuspendLayout();

//

// buttonl //

this.buttonl.BackColor =

System.Drawing.Color.FromArgb(((System.Byte)(255)),

((System.Byte) (224)),   ((System.Byte) (192)));

this.buttonl.Location = new System.Drawing.Point(24, 160); this.buttonl.Name = "buttonl";

this.buttonl.Size = new System.Drawing.Size(88, 24); this.buttonl.TabIndex = 0; this.buttonl.Text = "Add";

this.buttonl.Click += new System.EventHandler(this.buttonl_Click);

//

// textBoxl //

this.textBoxl.Location = new System.Drawing.Point(24, 40); this.textBoxl.Name = "textBoxl";

this.textBoxl.Size = new System.Drawing.Size(64, 20); this.textBoxl.TabIndex = 1; this.textBoxl.Text = "";

//

// textBox2 //

this.textBox2.Location = new System.Drawing.Point(120, 40); this.textBox2.Name = "textBox2";

this.textBox2.Size = new System.Drawing.Size(56, 20); this.textBox2.TabIndex = 2; this.textBox2.Text = "";

//

// labell //

this.labell.BackColor =

System.Drawing.Color.FromArgb(((System.Byte)(255)),

((System.Byte) (224)),   ((System.Byte) (192)));

this.labell.Location = new System.Drawing.Point(24, 8); this.labell.Name = "labell";

this.labell.Size = new System.Drawing.Size(64, 16); this.labell.TabIndex = 3; this.labell.Text = "Name";

//

// label2 //

this.label2.BackColor =

System.Drawing.Color.FromArgb(((System.Byte)(255)),

((System.Byte) (224)),   ((System.Byte) (192)));

this.label2.Location = new System.Drawing.Point(120, 8);

this.label2.Name = "label2";

this.label2.Size = new System.Drawing.Size(56, 16); this.label2.TabIndex = 4; this.label2.Text = "Group";

//

// button2 //

this.button2.BackColor =

System.Drawing.Color.FromArgb(((System.Byte) (255)) ,

((System.Byte) (224)),   ((System.Byte) (192)));

this.button2.Location = new System.Drawing.Point(136, 160);

this.button2.Name = "button2";

this.button2.Size = new System.Drawing.Size(64, 24); this.button2.TabIndex = 5; this.button2.Text = "Find";

this.button2.Click += new

System.EventHandler(this.button2_Click);

//

// Forml //

this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.BackColor =

System.Drawing.Color.FromArgb(((System.Byte) (192)),

((System.Byte) (255)),   ((System.Byte) (192)));

this.ClientSize = new System.Drawing.Size(360, 273);

this.Controls.Add(this.button2);

this.Controls.Add(this.label2);

this.Controls.Add(this.labell); this.Controls.Add(this.textBox2); this.Controls.Add(this.textBoxl); this.Controls.Add(this.buttonl); this.Name = "Forml"; this.Text = "Forml";

this.Load += new System.EventHandler(this.Forml_Load); this.ResumeLayout(false);

#endregion /// <summary>

/// The main entry point for the application.

/// </summary>

[STAThread] static void Main()

{

Application.Run(new Forml());

}

private void Forml_Load(object sender, System.EventArgs e)

{

myal=new ArrayList(); // Создаем объект типа ArrayList // при загрузке формы

}

private void buttonl_Click(object sender,

System.EventArgs e)

// Добавление объекта в список ArrayList {

Student stud=new Student(); // Создаем объект stud stud.name=textBoxl.Text; // Записываем значения полей name,

// group

stud.group=Convert.ToInt32(textBox2.Text); myal.Add(stud);

MessageBox.Show("Ready") ;

}

private void button2_Click(object sender,

System.EventArgs e)

// Поиск объекта по имени name

int priz=O; // Переменная priz равна 1, если найден нужный // объект в списке IEnumerator inum=myal.GetEnumerator(); // inum выполняет

// переход к новому // объекту

while(inum.MoveNext()) // Организуем цикл просмотра

// объектов списка

{

Student studcur=(Student) inum.Current; // studcur —

// текущий объект // в списке

String sl=studcur.name.Trim(); // Проверяем, совпадает ли // его поле name с искомым, заданным в текстовом поле // textBoxl

String s2=textBoxl.Text.Trim (); if(String.Compare(sl,s2)==0) // Оператор // String.Compare(sl,s2) возвращает 0, если строки // совпадают {

textBox2.Text=""+studcur.group; // Отображаемномер

// группы

priz=l; // Объект найден – выходим из цикла по break break;

}

continue;

}

if(priz==0)

MessageBox.Show("Not Found"); // Выводим сообщение, если

// запись не найдена

Источник: Герман О. B., Герман Ю. О., Программирование на Java и C# для студента. — СПб.: БХВ-Петербург, 2005. — 512 c.: ил.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100