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:欢迎指正。补充,下班了,以后再补充。