深入理解 c# 第十一章 Cast,OfType和显式类型的范围变量
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
标签:
C#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
2021-12-29 如何在ASP.NET Core中使用JSON Patch