目录
一、涉及到的知识点
1.迭代器
2.IList接口及实现IList接口的Add方法
二、实例
1.源码
2.生成效果
一、涉及到的知识点
1.迭代器
迭代器是.NET 4.5开始的一个新特性,它是可以返回相同类型的值的有序序列的一段代码。迭代器可用作方法、运算符或get访问器的代码体。
在迭代器的实现代码中,通常使用yield return语句依次返回每个元素,使用yield break语句终止迭代。
迭代器的返回类型必须为IEnumerable或IEnumerator中的任意一种。
2.IList<T>接口及实现IList<T>接口的Add方法
详见本文作者的其它文章,
二、实例
本实例使用C#中的迭代器依次显示公交车的所有站点,以方便人们的出行。
1.源码
// 使用迭代器显示公交车站点
namespace _121
{
public partial class Form1 : Form
{
private Label? label1;
private Button? button1;
private Button? button2;
private ListView? listView1;
public Form1()
{
InitializeComponent();
StartPosition = FormStartPosition.CenterScreen;
Load += Form1_Load;
}
private void Form1_Load(object? sender, EventArgs e)
{
//
// label1
//
label1 = new Label
{
AutoSize = true,
Location = new Point(12, 9),
Name = "label1",
Size = new Size(68, 17),
TabIndex = 0,
Text = "站点列表:"
};
//
// button1
//
button1 = new Button
{
Location = new Point(177, 29),
Name = "button1",
Size = new Size(75, 23),
TabIndex = 1,
Text = "站点",
UseVisualStyleBackColor = true
};
button1.Click += Button1_Click;
//
// button2
//
button2 = new Button
{
Location = new Point(177, 58),
Name = "button2",
Size = new Size(75, 23),
TabIndex = 2,
Text = "关闭",
UseVisualStyleBackColor = true
};
button2.Click += Button2_Click;
//
// listView1
//
listView1 = new ListView
{
Location = new Point(12, 29),
Name = "listView1",
Size = new Size(159, 120),
TabIndex = 3,
UseCompatibleStateImageBehavior = false
};
//
// Form1
//
AutoScaleDimensions = new SizeF(7F, 17F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(264, 161);
Controls.Add(listView1);
Controls.Add(button2);
Controls.Add(button1);
Controls.Add(label1);
Name = "Form1";
Text = "用迭代器显示公交站点";
Busstop();
}
/// <summary>
/// 在列表视图中显示公交车站点
/// </summary>
private void Button1_Click(object? sender, EventArgs e)
{
foreach (object i in GetValues())
listView1!.Items.Add(i.ToString());
}
/// <summary>
/// 关闭当前窗体
/// </summary>
private void Button2_Click(object? sender, EventArgs e)
{
Close();
}
/// <summary>
/// 定义一个泛型对象,用于存储对象,封装并使用属性
/// 通过迭代器获取泛型中的所有对象值
/// </summary>
/// <param Node="n">泛型对象</param>
/// <returns>IEnumerable<object></returns>
private static IList<object> items = [];
public static IList<object> Items { get => items; set => items = value; }
public static IEnumerable<object> GetValues()
{
if (Items != null) //如果泛型不为空
{
foreach (object i in Items)//遍历泛型中的对象
yield return i;
}
}
/// <summary>
/// 向泛型集合中添加站点数据
/// </summary>
static void Busstop()
{
Items.Add("长新东路");
Items.Add("同康路");
Items.Add("农行干校");
Items.Add("八里堡");
Items.Add("东荣大路");
Items.Add("二木材");
Items.Add("胶合板厂");
Items.Add("阜丰路");
Items.Add("荣光路");
Items.Add("东盛路");
Items.Add("安乐路");
Items.Add("岭东路");
Items.Add("公平路");
Items.Add(108);
Items.Add(true);
}
}
}