using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;

namespace MyCollection
{
public class ExtendCollection<T> : Collection<T> where T : class
{
/// <summary>
/// 从Collection取得类型为K的所有类型,K为T的子类。
/// </summary>
/// <typeparam name="K">K为待取类型</typeparam>
/// <returns>返回所有类型为K的枚举器</returns>
public IEnumerable<K> GetEnumerator<K>() where K : class, T
{
foreach (T t in base.Items)
{
if (t is K) yield return t as K;
}

}

/// <summary>
/// 从Collection取得类型为K的所有类型,K为T的子类。
/// </summary>
/// <typeparam name="K">K为待取类型</typeparam>
/// <returns>返回所有类型为K的集合</returns>
public ICollection<K> GetItems<K>() where K : class, T
{
ICollection<K> c = new Collection<K>();
foreach (T t in base.Items)
{
if (t is K) c.Add(t as K);
}
return c;
}

/// <summary>
/// 从Collection中取得第一个类型为K的实例
/// </summary>
/// <typeparam name="K">K为待取类型</typeparam>
/// <returns>类型为K的实例</returns>
public K First<K>() where K : class, T
{
foreach (T t in base.Items)
{
if (t is K) return t as K;
}
return null;

}
}
}



using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;


namespace MyCollection
{
/// <summary>
/// 扩展集合类,使用了LinQ对ExtendCollection<T>在.net3.5下进行了重写
/// </summary>
/// <typeparam name="T">类型参数T</typeparam>
public class MyExtendCollection<T> : Collection<T> where T : class
{
/// <summary>
/// 从Collection取得类型为K的所有类型,K为T的子类。
/// </summary>
/// <typeparam name="K">K为待取类型</typeparam>
/// <returns>返回所有类型为K的枚举器</returns>
public IEnumerable<K> GetEnumerator<K>() where K : class, T
{
return base.Items.Where(t => t is K).Select(t => t as K);
}

/// <summary>
/// 从Collection取得类型为K的所有类型,K为T的子类。
/// </summary>
/// <typeparam name="K">K为待取类型</typeparam>
/// <returns>返回所有类型为K的集合</returns>
public ICollection<K> GetItems<K>() where K : class, T
{
return base.Items.Where(t => t is K).Select(t => t as K).ToList();
}

/// <summary>
/// 从Collection中取得第一个类型为K的实例
/// </summary>
/// <typeparam name="K">K为待取类型</typeparam>
/// <returns>类型为K的实例</returns>
public K First<K>() where K : class, T
{
return (base.Items.Where(t => t is K).First() as K);
}

}
}


机器人,这首歌学会了没有?

我们的目标是->没有蛀牙!