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

C#中如何从List<Food>高效获取List<Meat>类型的子列表?

解决List转List的简洁高效方法

嗨,这个问题我太有共鸣了!手动写foreach逐个强制转换确实麻烦,.NET的LINQ早就为我们准备了更优雅的解决方案,不用自己造轮子。

这里有两种常用的方法,根据你的需求选就行:

1. 直接用OfType<T>()一步到位

这个方法是最省心的,它会自动筛选出集合中属于指定类型的元素,同时直接返回IEnumerable<T>类型的结果,最后调用ToList()就能得到List<Meat>:

List<Food> allTheFood = GetListOfFood();
List<Meat> justTheMeats = allTheFood.OfType<Meat>().ToList();

这个方法相当于把你原来的Where(x => x is Meat)和后续的类型转换合并成了一步,而且更安全——如果集合里有非Meat类型的元素,它会直接跳过,不会抛出异常。

2. 先用Where筛选再用Cast<T>()转换

如果你已经通过Where条件确保了筛选后的元素都是Meat类型(比如你的判断逻辑比单纯的类型检查更复杂),可以用Cast<T>()来直接转换整个集合:

List<Food> allTheFood = GetListOfFood();
List<Meat> justTheMeats = allTheFood.Where(x => x is Meat).Cast<Meat>().ToList();

⚠️ 注意:如果筛选后的集合里存在非Meat类型的元素,Cast<T>()会抛出InvalidCastException,所以只有当你100%确定元素类型时才用这个方法,否则优先选OfType<T>()。

额外提示

别忘了在代码文件顶部引用System.Linq命名空间,不然这些LINQ方法都用不了哦:

using System.Linq;

这两种方法的效率和你手动写foreach差不多,但代码简洁度和可读性提升太多了,日常开发中我几乎都是用这些LINQ方法来处理这类类型转换+筛选的场景。

内容的提问来源于stack exchange,提问作者Kieran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 18:52:32