zoukankan      html  css  js  c++  java
  • C# 每天温习一点(IEnumerable<TSource>)

           1, IEnumerable<TSource> 多数屌丝写成  IEnumerable<T>  无论TSource还是T都代表一个意思:要枚举的对象的类型 。IEnumerable<T>是一个枚举器,该枚举器支持在指定类型的集合上进行简单迭代(官方解释),简单的说就是实现了IEnumerable<T> 接口才能使用foreach 迭代。

           2,首先先看下如何实现自定义类的迭代。下面来看一段代码。这里首先定义了一个Dog类,为该类添加了索引器和实现IEnumerable接口。实现的三大方法便可以foreach啦。通常我们在做类似自定义Session管理的时候会采用这样设计思想。

          

      public class Dogs : IEnumerable, IEnumerator
        {
            public string name { get; set; }
            public bool sex { get; set; }
            public List<object> list = new List<object>();
            int dex = -1;
            /// <summary>
            /// 屌丝。这是一个索引器
            /// </summary>
            /// <param name="index"></param>
            /// <returns></returns>
            public object this[int index]
            {
                get
                {
                    return list[index];
                }
                set
                {
                    list[index] = value;
                }
            }
            public void Add<T>(T t)
            {
                list.Add(t);
            }
            public IEnumerator GetEnumerator()
            {
                return (IEnumerator)this;
            }
            public object Current
            {
                get { return this[dex]; }
            }
            public bool MoveNext()
            {
      if (dex >= list.Count-1)
                {
                    return false;
                } dex
    ++; return true; } public void Reset() { dex = -1; } }

            这个关于Dogs的类有个索引器。所以它能存储数据。它实现了IEnumerable so,他就能迭代了,是不是很神。

          

               string[] str = { "1", "2", "213" };
                Dogs dogs = new Dogs();
                foreach (var item in str)
                {
                    dogs.Add(new Dogs()
                    {
                        name = item,
                    });
                }
                foreach (Dogs item in dogs)
                {
                    Console.WriteLine(item.name);
                }

        二:接下来是一个奇奇怪怪的拓展方法:这个方法在字符串处理的时候的很好用,这个可以将一个实现了IEnumerable接口的类如 List<t>拼成字符串。是做前后端交互的必备。可以节省各位屌丝的大量时间。

       

           public static string ToSealString(this IEnumerable l, string split)
            {
                split = ",";
                StringBuilder strText = new StringBuilder();
                var e = l.GetEnumerator();
                while (e.MoveNext())
                {
    
                    strText.Append(e.Current.ToString() + split);
                }
                if (strText.Length > 1)
                {
                    strText = strText.Remove(strText.Length - split.Length, 1);
                }
                return strText.ToString();
            }

          ps:欢迎指正。补充,下班了,以后再补充。

  • 相关阅读:
    论登陆博客园的时候忘记了密码
    LNOI 2019 旁观记
    [bzoj3790] 神奇项链
    [POI2000] 病毒
    [HAOI2008] 移动玩具
    [codevs1288] 埃及分数
    [hdu1401] Solitaire
    [洛谷P3806] [模板] 点分治1
    [国家集训队] 聪聪可可
    [洛谷P4178] Tree
  • 原文地址:https://www.cnblogs.com/xiachong-0769/p/3382892.html
Copyright © 2011-2022 走看看