这期内容当中小编将会给大家带来有关怎么在C#中使用yield关键字构建一个迭代器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
以代码
public class Car
{
//内部状态数据
public int CurentSpeed;
public int MaxSpeed;
public string name;
//汽车能不能用
private bool carIsdead;
//类构造函数
public Car() { }
public Car(string name, int currentspeed, int maxspeed = 100)
{
this.name = name;
this.CurentSpeed = currentspeed;
this.MaxSpeed = maxspeed;
}
//定义委托类型
public delegate void CarEngineHandler(string msdForCar);
//定义每个委托类型的成员变量
private CarEngineHandler listOfhandlers;
//向调用者添加注册函数
public void RegisterWithCarEngine(CarEngineHandler methodTocall)
{
if (listOfhandlers == null)
listOfhandlers = methodTocall;
else
listOfhandlers += methodTocall;//支持多路广播
}
//实现Accelerate()方法
public void Accelerate(int delta)
{
if (carIsdead)
{
if (listOfhandlers != null)
{
listOfhandlers("sorry,this car is dead");
}
}
else
{
CurentSpeed += delta;
//不能超过最大速度
if (5 == (MaxSpeed - CurentSpeed) && listOfhandlers != null)
{
listOfhandlers("this speed is nearly to the maxspeed");
}
if (CurentSpeed > MaxSpeed)
{
carIsdead = true;
}
else
Console.WriteLine("current speed:{0}", CurentSpeed);
}
}
}
public class Garage : IEnumerable
{
private Car[] garage = new Car[3];
public Garage()
{
garage[0] = new Car("a", 10);
garage[1] = new Car("b", 13);
garage[2] = new Car("c", 14);
}
public Enumerator GetEnumerator()
{
//返回数组对象的IEnumerator
//return garage.GetEnumerator();
//用yield关键字构建迭代器方法
foreach (Car c in garage)
{
//当yield return语句执行后,当前位会被
//保存下来,下一次执行会从当前位开始
yield return c;
}
}
}
class Program
{
static void Main(string[] args)
{
Garage g = new Garage();
foreach (Car c in g)
{
Console.WriteLine("car name:{0}", c.name);
}
}
}
上述就是小编为大家分享的怎么在C#中使用yield关键字构建一个迭代器了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。