You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中将对象数组中的每个对象转换为对应类型实例?

解决方案

错误原因

你的写法会对数组中所有元素尝试强制转换,比如获取Cat时,遍历到Dog或Bird实例时,强制转换会直接抛出InvalidCastException,而非跳过不符合类型的元素。

正确实现方式

使用LINQ的OfType<T>()方法,它会先筛选出数组中属于T类型(或其派生类型)的元素,再返回强类型集合,避免转换失败的异常:

using System.Linq;

// 安全获取Cat实例,不存在则返回null
Cat cat = data.OfType<Cat>().FirstOrDefault();
// 安全获取Dog实例,不存在则返回null
Dog dog = data.OfType<Dog>().FirstOrDefault();
// 安全获取Bird实例,不存在则返回null
Bird bird = data.OfType<Bird>().FirstOrDefault();

替代写法(等价效果)

如果不想用OfType<T>(),也可以通过Where筛选+Cast转换的组合实现:

Cat cat = data.Where(x => x is Cat).Cast<Cat>().FirstOrDefault();

说明

  • 两种写法都会先检查元素类型,仅对符合条件的元素进行转换,不会抛出类型转换异常。
  • 如果数组中不存在目标类型的实例,FirstOrDefault()会返回对应类型的默认值(引用类型为null,值类型为default(T))。

内容的提问来源于stack exchange,提问作者Marija Magdalena Bašić

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 21:55:42