gpt4 book ai didi

C#、objectCollection.OfType() 和 foreach(objectCollection 中的 T 项)、IEnumerable 到 IEnumerable

转载 作者:太空狗 更新时间:2023-10-29 21:30:14 26 4
gpt4 key购买 nike

属于我个人的编码风格 Enumerable.OfType<T>() .我在任何地方都使用它,它有点有意义。特别是IEnumerable<T>允许强大的 linqToObject 功能。我讨厌 ObjectCollection 的“类型不安全”循环,例如下面的示例。现在我对遍历这些“UnGenericCollections”有一些疑问。

问题 1:如果我转换这个 ArrayListEnumerable<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) { }

感谢您忍受我糟糕的英语。最好的问候,本杰明

最佳答案

答案 1:

在您的示例中 - 您实际上可能会迭代 FULL 可枚举两次。

// i use
foreach (var human in ark.OfType<Human>())
{
}

foreach (var animal in ark.OfType<Animal>())
{
}

答案 2:

方舟内有非人类时会抛出InvalidCastException异常

我个人更喜欢 ark.OfTypes<T>() ,如果我知道我只想处理 HumanAnimals但会忽略 Elves .这种方式的代码更加简洁,并且您在 foreach 循环中处理强类型对象。

但如果我不想忽略 Elves ,我宁愿遍历完整的 ArrayList 并使用强制转换。

关于C#、objectCollection.OfType<T>() 和 foreach(objectCollection 中的 T 项)、IEnumerable 到 IEnumerable<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6063471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com