首页 > 代码库 > yield关键字的用法
yield关键字的用法
在上一篇文章中,说了下foreach的用法,但是还是比较复杂的,要实现接口才能进行遍历,有没有简单些的方法呢?答案是肯定的。且看下面。
yield关键字的用法:
1.为当前类型添加一个任意方法,但是要求该方法的返回值类型必须是IEnumerable:<代码1-1>
1 class Person 2 { 3 public string Name { get; set; } 4 public int Age { get; set; } 5 6 public string[] _Name = new string[] { "zxh", "jk", "ml", "wcw", "sk", "yzk" }; 7 8 public IEnumerable<string> GetEnumerableObject() 9 {10 for (int i = 0; i < _Name.Length; i++)11 {12 yield return _Name[i];13 }14 }15 }
遍历的方法如下:<代码1-2>
1 Person p1 = new Person();2 foreach (var item in p1.GetEnumerableObject())3 {4 Console.WriteLine(item);5 }6 Console.ReadKey();
2.为当前类型添加一个GetEnumerator()方法,返回值类型是IEnumerator.<代码1-3>
1 class Person 2 { 3 public string Name { get; set; } 4 public int Age { get; set; } 5 6 public string[] _Name = new string[] { "zxh", "jk", "ml", "wcw", "sk", "yzk" }; 7 8 //为当前类型添加一个GetEnumerator()方法,返回值类型是IEnumerator. 9 public IEnumerator<string> GetEnumerator()10 {11 for (int i = 0; i < _Name.Length; i++)12 {13 yield return _Name[i]; //yield break;则跳出循环。14 }15 }16 }
遍历的方法如下:<代码1-4>
1 Person p1 = new Person();2 foreach (var item in p1)3 {4 Console.WriteLine(item);5 }6 Console.ReadKey();
yield break的用法,我们在代码1-3修改一下:<代码1-5>
1 class Person 2 { 3 public string Name { get; set; } 4 public int Age { get; set; } 5 6 public string[] _Name = new string[] { "jk", "ml","zxh", "wcw", "sk", "yzk" }; 7 8 //为当前类型添加一个GetEnumerator()方法,返回值类型是IEnumerator. 9 public IEnumerator<string> GetEnumerator()10 {11 for (int i = 0; i < _Name.Length; i++)12 {13 if (_Name[i] == "zxh")14 {15 yield break; //跳出循环16 }17 else18 {19 yield return _Name[i]; 20 }21 }22 }23 }
当再执行<代码1-4>时,会发现遍历到zxh,程序退出。运行结果如下:
通过方法二的实现,就可以直接遍历你的自定义对象了。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。