zoukankan      html  css  js  c++  java
  • 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                 else
    18                 {
    19                     yield return _Name[i]; 
    20                 }
    21             }
    22         }
    23     }

    当再执行<代码1-4>时,会发现遍历到zxh,程序退出。运行结果如下:

    通过方法二的实现,就可以直接遍历你的自定义对象了。

  • 相关阅读:
    How to change the property of a control from a flowlayoutpanel?
    Add controls dynamically in flowlayoutpanel
    CLR via C# 读书笔记 6-2 不同AppDomain之间的通信 z
    应用程序域 z
    C# 在SQLite数据库中存储图像 z
    Using .NET 4's Lazy<T> 实现单实例
    tpl demo
    SQLite批量插入,修改数据库 zt
    Dev表格导出工具类 z
    easyui 设置一加载,搜索框立即弹出的效果
  • 原文地址:https://www.cnblogs.com/chens2865/p/3861713.html
Copyright © 2011-2022 走看看