当前位置: 首页 > news >正文

C#中LINQ的Cast<T>与OfType<T>

在C#中,Cast() 方法是LINQ(Language Integrated Query)的一部分,它位于 System.Linq 命名空间中。这个方法用于将 IEnumerable 集合(或任何实现了 IEnumerable 接口的集合)的元素转换为指定类型 T 的集合。这个过程实际上是尝试将每个元素视为类型 T,如果转换失败(比如,如果某个元素无法被强制转换为 T),则会抛出一个 InvalidCastException。

使用场景
当你有一个对象集合,并希望以强类型的方式处理这些对象时,Cast() 方法非常有用。这在你不能确定集合中所有元素都是特定类型但又需要按该类型处理它们时尤其有用。

示例
假设我们有一个 List,其中包含了一些字符串和整数,但我们只对字符串感兴趣。我们可以使用 Cast() 来尝试将集合转换为字符串集合,但需要注意,如果集合中包含非字符串元素,这将导致运行时错误。

using System;  
using System.Collections.Generic;  
using System.Linq;  class Program  
{  static void Main()  {  List<object> objects = new List<object> { "Hello", 123, "World" };  try  {  // 尝试将 List<object> 转换为 List<string>  var strings = objects.Cast<string>().ToList();  // 这里不会执行,因为 Cast<string>() 会抛出 InvalidCastException  // 因为它试图将整数 123 转换为 string  foreach (var str in strings)  {  Console.WriteLine(str);  }  }  catch (InvalidCastException ex)  {  Console.WriteLine("无法将所有对象转换为字符串: " + ex.Message);  }  // 正确的做法是使用 OfType<T>(),它只会返回可以成功转换为 T 的元素  var safeStrings = objects.OfType<string>().ToList();  foreach (var str in safeStrings)  {  Console.WriteLine(str);  }  }  
}

在上面的示例中,尝试使用 Cast() 会导致 InvalidCastException,因为集合 objects 包含了一个整数,该整数无法转换为字符串。为了避免这种情况,我们可以使用 OfType() 方法,它只会返回那些可以成功转换为指定类型 T 的元素,而忽略那些不能转换的元素。


结论
Cast() 尝试将 IEnumerable 集合中的每个元素转换为类型 T。
如果任何元素无法转换为 T,则会抛出 InvalidCastException。
使用 Cast() 时要小心,确保集合中的所有元素都可以安全地转换为 T。
如果需要处理可能包含不同类型元素的集合,并只想获取那些可以转换为特定类型的元素,考虑使用 OfType() 方法。

http://www.lryc.cn/news/432297.html

相关文章:

  • 小阿轩yx-Kubernertes日志收集
  • 0to1使用Redis实现“登录验证”次数限制
  • ARM----时钟
  • NISP 一级 —— 考证笔记合集
  • C++三位状态比较排序
  • 麒麟系统安装GPU驱动
  • IDEA 安装lombok插件不兼容的问题及解决方法
  • 聊聊说话的习惯
  • 当水泵遇上物联网:智能水务新时代的浪漫交响
  • 【Canvas与钟表】干支表盘
  • 分布式项目中使用雪花算法提前获取对象主键ID
  • 小程序多个set-cookie无法处理
  • Mybatis【分页插件,缓存,一级缓存,二级缓存,常见缓存面试题】
  • 【Qt开发】QT6.5.3安装方法(使用国内源)亲测可行!!!
  • springblade-JWT认证缺陷漏洞CVE-2021-44910
  • Chapter 12 Vue CLI脚手架组件化开发
  • Ubuntu: 配置OpenCV环境
  • 芯片解决方案--SL8541e-OpenHarmony适配方案
  • Spring Boot之数据访问集成入门
  • Learn ComputeShader 09 Night version lenses
  • Java学习第七天
  • 深入剖析 Redis 基础及其在 Java 应用中的实战演练
  • Why I‘m getting 404 Resource Not Found to my newly Azure OpenAI deployment?
  • 【word导出带图片】使用docxtemplater导出word,通知书形式的word
  • 微信小程序路由跳转之间的区别
  • centos安装docker并配置加速器
  • 【软件测试】设计测试用例
  • Kafka【十三】消费者消费消息的偏移量
  • Python 的语法元素(容易忘记的)
  • 找到字符串中所有字母异位词问题