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 = -;
/// <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 = -;
}
}

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

           string[] str = { "", "", "" };
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 > )
{
strText = strText.Remove(strText.Length - split.Length, );
}
return strText.ToString();
}

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

C# 每天温习一点(IEnumerable<TSource>)的更多相关文章

  1. 为IEnumerable<T>添加RemoveAll<IEnumerable<T>>扩展方法--高性能篇

    最近写代码,遇到一个问题,微软基于List<T>自带的方法是public bool Remove(T item);,可是有时候我们可能会用到诸如RemoveAll<IEnumerab ...

  2. 对Dapper的一点改造

    微软推出的ORM, EF在我开发的项目中给我的感觉一直都是慢.优点是高度封装的底层.便于开发. Dapper在多篇性能比较的网站中.都是名列前三.缺点是手写SQL,不便于开发.   如果能结合EF的优 ...

  3. 【C#夯实】我与接口二三事:IEnumerable、IQueryable 与 LINQ

    序 学生时期,有过小组作业,当时分工一人做那么两三个页面,然而在前端差不多的时候,我和另一个同学发生了争执.当时用的是简单的三层架构(DLL.BLL.UI),我个人觉得各写各的吧,到时候合并,而他觉得 ...

  4. IEnumerable和IEnumerable<T>接口

    IEnumerable和IEnumerable<T>接口 IEnumerable和IEnumerable<T>接口在.NET中是非常重要的接口,它允许开发人员定义foreach ...

  5. IEnumerable<T>与IQueryable<T>以及.net的扩展方法

    首先看看继承关系 public abstract class DbSet : DbQuery public abstract class DbQuery : IOrderedQueryable, IQ ...

  6. IEnumerable接口的Aggregate方法

    以前小猪为了累加一个集合中的类容通常会写出类似这样的C#代码: string result ="": foreach (var item in items) { result+=i ...

  7. Linq/List/Array/IEnumerable等集合操作

    来源:http://www.cnblogs.com/liushanshan/archive/2011/01/05/1926263.html 目录 1    LINQ查询结果集    1 2    Sy ...

  8. 轻轻的扩展了一下IEnumerable<T>

    今天用EF写东西玩,觉得IEnumerable里面除了where().select(),是不是能添加点其他方法呢. 想做就做,F12到方法定义: public static IEnumerable&l ...

  9. C# IQueryable和IEnumerable的区别

    在使用EF查询数据的时候,我们常用的查询数据方式有linq to sql,linq to object, 查询返回的结果有两种类型:IQueryable.IEnumerable,两者内部的处理机制是完 ...

随机推荐

  1. php把时间格式化

    如题,把如 2013-6-12 12:00 格式化为 2013-6--12 可以先将时间转换下,然后重新将时间格式化显示: echo date("Y-m-d", strtotime ...

  2. 关于block以及__bridge的一些笔记

    问题概要 _block是否是一个OC对象? __bridge相关. _block是否是一个OC对象? 结论 一般来说,block可以看做一个OC对象,但是在编译器底层,block又可以被细分为bloc ...

  3. 创建类模式(三):创建者(Builder)

    定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.这使得构件算法和组装方式可以独立应对变化:复用同样的构建算法可以创建不同的表示,不同的构建过程可以复用相同的部件组装方式 ...

  4. Protobuf一键生成代码bat文件

    最近在摆弄Unity的Socket,需要用到Protobuf,一般都会有多个协议文件,所以研究了下bat的批处理,下面给出批处理文件代码: @echo off ::协议文件路径, 最后不要跟“\”符号 ...

  5. 手机调用系统的拍照和裁剪功能,假设界面有输入框EditText,在一些手机会出现点击EditText会弹出输入法,却不能输入的情况。

    1. 拍照裁剪后 点击EditText会弹出输入法,却不能输入.可是点击点一EdtiText就能够输入了,所以我就写了一个看不见的EdtiText,切换焦点,这样就攻克了这个奇怪的这问题,应该是and ...

  6. 记录一下跟Python有关的几个拓展名

    .py python文本源码文件,也可以用python.exe直接运行 .pyw 也是python的文本源码文件,但是默认由pythonw.exe打开,而且不显示命令行窗口,带GUI的python代码 ...

  7. JQuery Plugin 1 - Simple Plugin

    1. How do you write a plugin in jQuery? You can extend the existing jQuery object by writing either ...

  8. 小学生玩ACM----优先队列

    思来想去,本人还是觉得,这个优先队列啊,不学不行,怎么说咧?虽说有时候我可以模仿它的功能,但是有的题目会坑的我大放血,况且多学会用一个小东东总不会伤身的撒,何况我是永举不垂的,哦耶,嘿嘿 优先队列嘛就 ...

  9. android圆角View实现及不同版本这间的兼容(android3.0过后的版本)

    http://blog.csdn.net/lovecluo/article/details/8710174 在做我们自己的APP的时候,为了让APP看起来更加的好看,我们就需要将我们的自己的View做 ...

  10. thinkphp模板中使用自定义函数

    注意:自定义函数要放在项目应用目录/common/common.php中. 这里是关键. 模板变量的函数调用格式:{$varname|function1|function2=arg1,arg2,### ...