12

随机示例:

ConfigurationElementCollection

.Net 有大量这些WhateverCollection没有实现IEnumerable<T>的小类,这意味着我不能使用 Linq 来使用它们开箱即用的对象。甚至在 Linq 之前,你会认为他们会想要使用泛型(我相信在 C# 2 中一直引入)

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

4

2 回答 2

7

答案在问题标题中:“命名集合”。这是在泛型可用之前您必须使集合类型安全的方式。其中有很多可以追溯到 .NET 1.x 的代码,尤其是 Winforms。没有合理的方法来使用泛型重写它们,这会破坏太多现有代码。

因此,命名集合类型是类型安全的,但问题是 System.Collections.IEnumerator.Current,它是 Object 类型的属性。您可以使用 OfType() 或 Cast() 对这些集合进行 Linqify。

于 2013-01-09T17:05:31.303 回答
1

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

例子:

var a = new DogCollection();
var allFidos = a.Cast<Dog>().Where(d => d.Name == "Fido"); 
于 2013-01-09T17:09:16.947 回答