为什么.net中这么多命名集合没有实现IEnumerable

本文关键字:实现 IEnumerable 集合 net 为什么 | 更新日期: 2023-09-27 17:51:11

随机示例:

ConfigurationElementCollection

。Net有很多这样的小WhateverCollection类,它们不实现IEnumerable<T>,这意味着我不能使用Linq to对象,因为它们是现成的。甚至在Linq出现之前,你就会认为他们想要使用泛型(我相信在c# 2中就已经引入了泛型)

我似乎总是遇到这些烦人的小集合类型。有什么技术上的原因吗?

为什么.net中这么多命名集合没有实现IEnumerable<T>

答案就在题目"named collections"中。这就是在泛型可用之前必须使集合类型安全的方法。有很多可以追溯到。net 1的代码。x,尤其是Winforms。没有合理的方法来使用泛型重写它们,那会破坏太多现有的代码。

所以命名集合类型是类型安全的,但是问题是System.Collections.IEnumerator。当前,对象类型的属性。您可以使用OfType()或Cast()对这些集合进行拼字。

正如Adam Houldsworth在评论中所说,您只需要使用Cast<>方法。

的例子:

var a = new DogCollection();
var allFidos = a.Cast<Dog>().Where(d => d.Name == "Fido");