我的个人编程风格包括 Enumerable.OfType<T>()
。只要有一点点意义,我就无处不用它。特别是 IEnumerable<T>
提供了强大的 LinqToObject 功能。我讨厌 ObjectCollections 的“类型不安全”循环,比如下面的示例。现在我有一些关于遍历这些“非泛型集合”的问题。
ConfigurationSectionCollection
HttpModuleCollection
SPBaseCollection
SPFieldCollection
ArrayList
- 等等...
问题1: 如果我将这个 ArrayList
转换为 Enumerable<T>
,与简单的 foreach/if-checks 相比,额外循环的开销有多大?
var ark = new ArrayList();
ark.Add(new Human());
ark.Add(new Human());
ark.Add(new Animal());
改为:
foreach (object passenger in ark)
{
if (passanger is Human) { }
if (passanger is Animal) { }
}
我使用:
foreach (var human in ark.OfType<Human>())
{
}
foreach (var animal in ark.OfType<Animal>())
{
}
问题2:在使用foreach循环时,如何将不同类型的变量进行转换?这是语言特性还是可以直接使用的功能?
foreach (Human human in ark) { }
感谢您忍受我可怕的英语。最好的问候,本杰明。