LINQ之OfType

返回LINQ大全首页

OfType()

OfType()可以用于筛选指定类型(及其子类)。
MSDN

下面代码示例中使用的类结构如下图所示。
在这里插入图片描述
代码示例:

public static class Program
{
    private class BaseClass
    {
        public virtual string   Type    { get { return "-"; } }
        public string           Name    { get; set; }

        public override string ToString()
        {
            return string.Format( "Type:{0}, Name:{1}", Type, Name );
        }
    }
    private class ClassA : BaseClass
    {
        public override string  Type    { get { return "A"; } }
    }
    private class ClassB : BaseClass
    {
        public override string  Type    { get { return "B"; } }
    }
    private class ClassC : ClassB
    {
        public override string  Type    { get { return "C"; } }
    }

    static void Main( string[] args )
    {
        BaseClass[] parameters  = new BaseClass[]
        {
            new ClassA() { Name = "正一郎" },
            new ClassB() { Name = "清次郎" },
            new ClassB() { Name = "誠三郎" },
            new ClassC() { Name = "征史郎" },
        };

        // 转换
        IEnumerable<BaseClass>  reaultBase  = parameters.OfType<BaseClass>();
        IEnumerable<ClassA>     reaultA     = parameters.OfType<ClassA>();
        IEnumerable<ClassB>     reaultB     = parameters.OfType<ClassB>();
        IEnumerable<ClassC>     reaultC     = parameters.OfType<ClassC>();

        // 输出
        System.Console.WriteLine( "parameters:{0}", parameters.Text() );
        System.Console.WriteLine( "BaseClass:{0}", reaultBase.Text() );
        System.Console.WriteLine( "ClassA:{0}", reaultA.Text() );
        System.Console.WriteLine( "ClassB:{0}", reaultB.Text() );
        System.Console.WriteLine( "ClassC:{0}", reaultC.Text() );

        System.Console.ReadKey();
    }

    public static string Text<TSource>( this IEnumerable<TSource> i_source )
    {
        string text = string.Empty;
        foreach( var value in i_source )
        {
            text += string.Format( "[{0}], ", value );
        }
        return text;
    }
}
parameters:[Type:A, Name:正一郎], [Type:B, Name:清次郎], [Type:B, Name:誠三郎],
[Type:C, Name:征史郎],
BaseClass:[Type:A, Name:正一郎], [Type:B, Name:清次郎], [Type:B,
Name:誠三郎], [Type:C, Name:征史郎],
ClassA:[Type:A, Name:正一郎],
ClassB:[Type:B, Name:清次郎], [Type:B, Name:誠三郎], [Type:C,
Name:征史郎],
ClassC:[Type:C, Name:征史郎],

下面使用ArrayList进行试验。

代码示例:

public static class Program
{
    static void Main( string[] args )
    {
        ArrayList list = new ArrayList() { 1, 3, "2", 5.5f };

        // 转换
        IEnumerable<int>    reaultInt       = list.OfType<int>();
        IEnumerable<string> reaultString    = list.OfType<string>();
        IEnumerable<float>  reaultFloat     = list.OfType<float>();
        IEnumerable<long>   reaultLong      = list.OfType<long>();

        System.Console.WriteLine( "list:{0}", list.Text() );
        System.Console.WriteLine( "int:{0}", reaultInt.Text() );
        System.Console.WriteLine( "string:{0}", reaultString.Text() );
        System.Console.WriteLine( "float:{0}", reaultFloat.Text() );
        System.Console.WriteLine( "long:{0}", reaultLong.Text() );

        System.Console.ReadKey();
    }

    public static string Text( this IEnumerable i_source )
    {
        string text = string.Empty;
        foreach( var value in i_source )
        {
            text += string.Format( "[{0}], ", value );
        }
        return text;
    }
} 
list:[1], [3], [2], [5.5],
int:[1], [3],
string:[2],
float:[5.5],
long:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我寄人间雪满头丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值