IEnumable 之cast

 IEnumerable<XML_station> ie = StationPanel.Controls.Cast<XML_station>().Reverse();

StationPanel.Controls这个是容器的控件集合,都是XML_station类型,

要把这个集合的控件倒序。StationPanel.Controls.Reverse()     是不存在的。只能用上述方法。

为什么这里要cast一下呢?StationPanel.Controls 怎么没有Reverse 方法?

Controls 类型是ControlCollection。

public class ControlCollection : ArrangedElementCollection, IList, ICollection, IEnumerable, ICloneable

而这个类不是泛型类。

Reverse是IEnumerable<T>的扩展方法。为什么要泛型类呢?这就是泛型的威力了。

抽取逻辑有2种:一个是委托,一个泛型。有异曲同工之妙。

cast源码如下:

 [__DynamicallyInvokable]
    public static IEnumerable<TResult> Cast<TResult>(this IEnumerable source)
    {
        IEnumerable<TResult> enumerable = source as IEnumerable<TResult>;
        if (enumerable != null)
        {
            return enumerable;
        }
        if (source == null)
        {
            throw Error.ArgumentNull("source");
        }
        return Enumerable.CastIterator<TResult>(source);
    }

    private static IEnumerable<TResult> CastIterator<TResult>(IEnumerable source)
    {
        foreach (object item in source)
        {
            yield return (TResult)item;
        }
    }






阅读更多
个人分类: C# 底层
上一篇IQueryable 和 IEnumable
下一篇SQL 存储过程调用其他存储过程的表
想对作者说点什么? 我来说一句

SQL中convert和cast的区别

2010年08月13日 21KB 下载

SQL中的cast和convert区别

2011年04月22日 61KB 下载

postgresql中的cast

2017年08月27日 13KB 下载

VB.net 微软WEBCAST教程1

2008年03月23日 4.25MB 下载

VB.net 微软WEBCAST教程2

2008年03月23日 6.91MB 下载

VB.net 微软WEBCAST教程3

2008年03月23日 9.78MB 下载

没有更多推荐了,返回首页

关闭
关闭