首页 > 编程语言 >.NET(C#) Cast和OfType的使用

.NET(C#) Cast和OfType的使用

时间:2023-11-06 23:44:49浏览次数:36  
标签:C# IEnumerable al System Cast 操作符 using NET

Linq是Language Integrated Query的简称,它是微软在.NET Framework 3.5里面新加入的特性,用以简化查询查询操作。本文主要介绍.NET(C#) 中Linq的Cast和OfType操作符。

1、Cast操作符

Cast操作符用于将一个类型为IEnumerable的集合对象转换为IEnumerable<T>类型的集合对象。也就是非泛型集合转成泛型集合,因为在Linq to OBJECT中,绝大部分操作符都是针对IEnumerable<T>类型进行的扩展方法。因此对非泛型集合并不适用。

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
           ArrayList al = new ArrayList();
            al.Add(1);
            al.Add(2);
            al.Add(3);
            IEnumerable<int> IEInt = al.Cast<int>();    //非泛型转泛型
            foreach (var i in IEInt)
            {
                Console.WriteLine(i);           
            }
            Console.ReadKey();
        }
    }
}

2、OfType操作符

OfType操作符与Cast操作符类似,用于将类型为IEnumerable的集合对象转换为IEnumerable<T>类型的集合对象。不同的是,Cast操作符会视图将输入序列中的所有元素转换成类型为T的对象,,如果有转换失败的元素存在Cast操作符将抛出一个异常;而OfType操作符仅会将能够成功转换的元素进行转换,并将这些结果添加到结果序列中去。与Cast操作符相比,OfType操作符更加安全。

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList al = new ArrayList();
            al.Add(1);
            al.Add(2);
            al.Add("a");
            //IEnumerable<int> IECast = al.Cast<int>();    //抛出异常
            //foreach (var i in IECast)
            //{
            //    Console.WriteLine(i);
            //}
            IEnumerable<int> IEOfType = al.OfType<int>();
            foreach (int i in IEOfType)
            {
                Console.WriteLine(i);   //输出 1 2 其中转换不了的a则不转换            
            }
            Console.ReadKey();
        }
    }
}

 

标签:C#,IEnumerable,al,System,Cast,操作符,using,NET
From: https://www.cnblogs.com/wwkk/p/17814084.html

相关文章

  • .NET(C#) Linq Range和Repeat的使用
    Linq是LanguageIntegratedQuery的简称,它是微软在.NETFramework3.5里面新加入的特性,用以简化查询查询操作。本文主要介绍.NET(C#)中Linq的Range和Repeat操作符。1、Range操作符Range操作符用于辅助生成一个整数序列。usingSystem;usingSystem.Collections.Generic;usi......
  • .NET(C#) 对象的拷贝(浅拷贝和深拷贝)
    本文主要介绍.NET(C#),对象的拷贝,包括浅拷贝和深拷贝,以及浅拷贝和深拷贝的实现方式,不同的实现方式之间的性能对比。1、浅拷贝和深拷贝浅拷贝是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的引用型字段则指复制它的一个引用到目标对象。如果改变目标对象中引用型字段的值......
  • C++模板显示指定类型时使用引用遇到的问题
    1.问题这里我想让模板函数接收int和char类型的参数,并进行相加,显示指定参数类型为int。第一个调用理论上会自动将char类型强转成int类型,后进行相加;第二个调用理论上会自动将int类型强转成char类型,后进行相加;但是报错Nomatchingfunctionforcallto'add_ab'template<typena......
  • HDFS Balancer存储水位稳定性原理与实践
    1.背景在HDFS分布式系统中,经常会上线新的datanode以环境集群容量不足的问题。但是往往旧datanode水位较高,甚至爆满无法写入,新datanode非常空闲,导致旧机器无法写入数据,集群的流量集中到新datanode中,造成新datanode网络延迟。为了解决上述问题,可以通过Balancer工具定时讲高水位dat......
  • 重学C语言——变量及其生命周期
    上一篇blog中,我们写了两个程序,一起来回顾一下~#include<stdio.h>intmain(){ inta=10; printf("%d\n",a); return0;}在这个程序中,我们定义了一个名为a的变量,并申请了4个字节的内存空间,用来存放10这个整数。#include<stdio.h>intmain(){ chara='h'; printf(......
  • USB转串口芯片对比选秀---推荐CP2102和CH340C
    参考应用文章:《USB转串口芯片你看好哪个(USB转串口芯片介绍)》简短不看版:建议选择这2款芯片:CP2102/CP2104和CH340C。稳定性较好。 1.FT232优势:最常用缺点:假货多,并不是不能用,而是稳定性差。串口容易丢。规格书:https://atta.szlcsc.com/upload/public/pdf/source/20130221/14......
  • NET(C#) Linq Take和TakeWhile的使用
    Linq是LanguageIntegratedQuery的简称,它是微软在.NETFramework3.5里面新加入的特性,用以简化查询查询操作。本文主要介绍.NET(C#)中Linq的Take和TakeWhile操作符。1、Take操作符Take操作符用于从输入序列中返回指定数量的元素,常用于分页。usingSystem;usingSystem.Coll......
  • js获去select选中值
    我想获取select选中的value,或者text,或者……比如这个:第一个option第二个option一:JavaScript原生的方法1:拿到select对象:`varmyselect=document.getElementById("select");2:拿到选中项的索引:varindex=myselect.selectedIndex;//selectedIndex代表的是你所选中项的ind......
  • 这次写一下inkscape这个矢量工具的使用,怎么使用shapebuilder, 作为一个设计师应该如何
    绘图工具常用的大家都知道,一般图像有web类型,位图,压缩图,原图,矢量图,而矢量图保存东西是用的矢量保存的,所以在拉伸等变换的时候会基于矢量方向计算,所以填充等总是均匀的,不像位图,拉伸时就会是使图像中的位点变稀疏,图像变得不清晰。这里adobe的photoshop是一个调色工具,这里要记得,虽然p......
  • Semaphore 和 CountdownEvent 的使用总结
    信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量。一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释......