首页 > 编程语言 >深入理解 c# 第十一章 Cast,OfType和显式类型的范围变量

深入理解 c# 第十一章 Cast,OfType和显式类型的范围变量

时间:2022-12-29 11:24:06浏览次数:43  
标签:OfType item c# list Cast int 类型

    class CastAndOfType
    {
        static void Main()
        {
            ArrayList list = new ArrayList { "First", "Second", "Third"};
            //list Count=3
            //list列表只包含字符串,可以放心地使用Cast<string>来获得一个
            //字符串序列
            var strings = list.Cast<string>();
            //strings{System.Linq.Enumerable.CastIterator<string>}
 
            foreach (string item in strings)
            //先strings 后 in  后 stinrg item 初始为null
            //"First",
            //"Second"
            //"Third"
            {
                Console.WriteLine(item);
            }
 
 
            list = new ArrayList { 1, "not an int", 2, 3};
            //list Count = 4
            //这个List包含混杂的内容,所以为了从中只获取整数,只能用
            //OfType<int>  如果使用Cast<int>,那么尝试把"not an int"
            //转换为int的时候,会抛出一个异常。这个异常只会发生在打印出
            //"1"之后---两个操作符都对数据进行流处理,在获取元素的时候
            //才对其转换。
            var ints = list.OfType<int>();
            //ints {System.Linq.Enumerable.OfTypeIterator<int>}
            foreach (int item in ints)
            //先foreach, 后ints 后 in 后 int item
            //item 多次赋值
            //1
            //2  "not an int"跳过了
            //3
            {
                Console.WriteLine(item);
            }
        }
    }

Cast,OfType和显式类型的范围变量

大多数时候,范围变量都可以是隐式类型。可能使用所需类型全部指定了的
泛型集合。如果相对一个ArrayList或一个object[]执行查询,假如LINQ不能
处理这种情况,有两个标准查询操作符来解决这个问题:Cast和OfType。
只有Cast是查询是查询表达式语法直接支持的。
这两个操作符很相似:都可以处理任意非类型化的序列,并返回强类型的序列。
Cast通过把每个元素都转换为目标类型(遇到不是正确类型的任何元素的时候,
就会出错)来处理,而OfType首先进行一个测试,以跳过任何具有错误类型的
元素。

OfType和Cast作为 Enumerable中的一个简单的扩展方法来使用。

 

输出
First
Second
Third
1
2
3
————————————————
版权声明:本文为CSDN博主「eyetired」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/eyetired/article/details/80042175

标签:OfType,item,c#,list,Cast,int,类型
From: https://www.cnblogs.com/wl-blog/p/17011994.html

相关文章

  • Centos7重置root密码
    如果忘记root密码,可以按以下步骤进行密码重置第一步在启动页面选择内核版本页面,按e进入编辑模式:  拉到后面,将ro改为rw,在这行后面加上init=/bin/sh    按ct......
  • 一文详解为什么需要用CMake来管理大型C++工程
    场景1:编译普通C++代码/*hello_world.cpp*/#include<iostream>usingnamespacestd;intmain(){cout<<"Hello,world!"<<endl;return0;}编译......
  • .htaccess语法介绍和常规使用示例
    一、htaccess是什么?概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。Unix、Linux系统或者是任何版本的ApacheWeb服务器都是支持.htac......
  • B2. Palindrome Game (hard version)-cf1527
    B2.PalindromeGame(hardversion)https://codeforces.com/problemset/problem/1527/B2题意给定一个长度为n的二进制串两人博弈每次可以做下面两个操作的一个:1.将......
  • 跟光磊学Java-macOS版IntelliJ IDEA设置
    IntelliJIDEA  在使用IntelliJIDEA开发项目之前还需要进行一些基本的设置,完成这些设置以后能让项目开发更加顺畅1.如何打开设置窗口在进行IntelliJIDE......
  • git解决error: The following untracked working tree files would be overwritten by
    git解决error:Thefollowinguntrackedworkingtreefileswouldbeoverwrittenbycheckout在IDEA中进行分支切换时,出现如此错误,导致无法正常切换:error:Thefollowing......
  • 跟光磊学Java-macOS版IntelliJ IDEA开发Java项目
    IntelliJIDEA  配置IntelliJIDEA后,就可以用它开发Java项目了,这里会手把手带领大家从头开始开发一个多模块的java项目1.IntelliJIDEA开发Java项目的流程......
  • sturct
    importstructa=12#struct.pack用于将Python的值根据格式符,转换为字符串#data_bytes=struct.pack(fmt,*data)str=struct.pack("<B",a)print('length:',len(s......
  • Microsoft 365 开发:如何通过PnP Powershell 启用和设定Version Settings
    Blog链接:​​​https://blog.51cto.com/13969817​​我们都知道SharePointOnline中的版本历史记录功能是用来跟踪对文档的每个更改,并在有人更改文档时创建文档的副本,启用列......
  • JavaScript防抖与节流函数:提高应用性能的利器
    前言大家好,我是CoderBin,防抖和节流函数目前已经是前端实际开发中两个非常重要的函数,也是面试经常被问到的面试题。但是很多前端开发者面对这两个函数还是有点摸不着头脑:无......