MyzikText.
.NET , , , . , , . , foreach , IEnumerable (). GetEnumerator(), Enumerator (). GetEnumerator() :
IEnumerator GetEnumerator();
, IEnumerable IEnumerator.
IEnumerator Object Current{get;}, , bool MoveNext(), , void Reset(), .
foreach. ( ), .
, , , IComparable. CompareTo(object obj), , , , "", "" "".
IEnumerable IEnumerator , . , Tovar .
class Tovar
{
public string Naz; //
public int Cena;
public Tovar(string n, int c) //
{
Naz = n;
Cena = c;
}
}
Tovar Cklad, :
class Cklad
{
public Tovar[] tovar; //
public Cklad() //
{
tovar = new Tovar[4];
}
}
, , 4.
IEnumerable.
:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
|
|
namespace WindowsFormsApplication1
{
public partial class Form1: Form
{
public static string s;
public static int kol;
class Tovar
{
public string Naz; //
public int Cena;
public Tovar(string n, int c) //
{
Naz = n;
Cena = c;
}
}
class Cklad
{
public Tovar[] tovar; //
public Cklad() //
{
tovar = new Tovar[4];
}
}
public Form1()
{
InitializeComponent();
kol = 0;
s = "";
}
Cklad ckl = new Cklad();
private void button2_Click(object sender, EventArgs e)
{
if (kol < 4)
{
ckl.tovar[kol] = new Tovar(textBox1.Text, Convert.ToInt32(textBox2.Text));
s = s + textBox1.Text + textBox2.Text + "\r\n";
}
else { s = s + "CKLAD POLHIJ" + "\r\n"; kol--; }
kol++;
textBox3.Text = s;
}
private void button1_Click(object sender, EventArgs e)
{
s = "";
s = " foreach"+ "\r\n";
foreach (Tovar t in ckl.tovar)
{
s = s + t.Naz + " " + t.Cena.ToString() + "\r\n";
}
s = s + " for" + "\r\n";
for (int i = 0; i < kol; i++)
{
s = s + ckl.tovar[i].Naz + " " + ckl.tovar[i].Cena.ToString() + "\r\n";
}
textBox3.Text = s;
}
}
}
11.2
, foreach ckl.tovar, , , , GetEnumerator.
, foreach Tovar ckl Cklad, tovar Cklad, ,
foreach (Tovar t in ckl)
{
s = s + t.Naz + " " + t.Cena.ToString() + "\r\n";
}
:
foreach statement cannot operate on variables of type ' WindowsFormsApplication1.Form1.Cklad ' because 'Books' does not contain a public definition for 'GetEnumerator'
( foreach ' WindowsFormsApplication1.Form1.Cklad ', ' GetEnumerator').
, :
using System.Collections;
Cklad IEnumerable:
class Cklad: IEnumerable
Cklad GetEnumerator:
public IEnumerator GetEnumerator()
{
for (int i = 0; i < 4; i++) yield return tovar[i];
}
, .. (. 207.)
, , foreach, : GetEnumerator, Current, MoveNext Reset. , , , , MoveNext 1 , Current ..
|
|
, , 2.0 , .
, . foreach , . yield.
...
, 2.0 , IEnumerable, . MoveNext Current IEnumerator. , , .
foreach , . , , , , , , ..
foreach, .
foreach, . , , , , foreach.
for , kol.
for (int i = 0; i < kol; i++)
{
s = s + ckl.tovar[i].Naz + " " + ckl.tovar[i].Cena.ToString() + "\r\n";
}