一、Enumerable.AsEnumerable<TSource> 方法
https://msdn.microsoft.com/zh-cn/library/bb335435%28v=vs.110%29.aspx
当实现类与基类都有相同的方法时( 基类是实现了 IEnumerable<T> ),要执行基本的方法,用 AsEnumerable
class AsEnumerableTest<T> : List<T>
{
public void Where(Func<T, bool> func)
{
Console.WriteLine("AsEnumerableTest 的 Where 方法");
}
}
public static void AsEnumerable()
{
AsEnumerableTest<int> q = new AsEnumerableTest<int>() { 1, 2, 3, 4 };
q.Where(r => r < 3);
var v = q.AsEnumerable().Where(r => r < 3);
Console.WriteLine(v.Count());
}
二、Enumerable.OfType<TResult> 方法
https://msdn.microsoft.com/zh-cn/library/bb360913%28v=vs.110%29.aspx
此方法是一个延迟执行的方法。只有执行遍历的时候,才会触发具体执行,当出现异常时,将进行忽略;
例:lsit 集合将有3个对象,会忽略第三个转换失败的对象.
ArrayList array = new ArrayList();
array.Add("a");
array.Add("b");
array.Add(4);
array.Add("c");
List<string> lsit = new List<string>();
foreach (var v in array.OfType<string>())
{
lsit.Add(v);
}
三、Enumerable.Cast<TResult> 方法
https://msdn.microsoft.com/zh-cn/library/bb341406%28v=vs.110%29.aspx
此方法是一个延迟执行的方法。只有执行遍历的时候,才会触发具体执行,当出现异常时,会抛出异常;
例:在遍历到第三个数据时,将抛出异常。
ArrayList array = new ArrayList();
array.Add("a");
array.Add("b");
array.Add(4);
array.Add("c");
List<string> lsit = new List<string>();
foreach (var v in array.Cast<string>())
{
lsit.Add(v);
}