- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
属于我个人的编码风格 Enumerable.OfType<T>()
.我在任何地方都使用它,它有点有意义。特别是IEnumerable<T>
允许强大的 linqToObject 功能。我讨厌 ObjectCollection 的“类型不安全”循环,例如下面的示例。现在我对遍历这些“UnGenericCollections”有一些疑问。
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) { }
感谢您忍受我糟糕的英语。最好的问候,本杰明
最佳答案
答案 1:
在您的示例中 - 您实际上可能会迭代 FULL 可枚举两次。
// i use
foreach (var human in ark.OfType<Human>())
{
}
foreach (var animal in ark.OfType<Animal>())
{
}
答案 2:
方舟内有非人类时会抛出InvalidCastException异常
我个人更喜欢 ark.OfTypes<T>()
,如果我知道我只想处理 Human
和 Animals
但会忽略 Elves
.这种方式的代码更加简洁,并且您在 foreach 循环中处理强类型对象。
但如果我不想忽略 Elves
,我宁愿遍历完整的 ArrayList 并使用强制转换。
关于C#、objectCollection.OfType<T>() 和 foreach(objectCollection 中的 T 项)、IEnumerable 到 IEnumerable<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6063471/
我有以下代码,用于检测 Silverlight 应用程序中某个点下方的所有元素 然后将它们过滤为仅特定类型的那些 - CardButton IEnumerable elementsBeneathCur
如何通过相关属性中的“OfType”过滤 LINQ 查询? 示例:我在 OrderLines 集合中搜索包含匹配的 productID 列表中的产品的订单行。我想使用 contains 来完成这个:
重要 问题不是“Queryable.OfType 有什么作用,而是“我在那里看到的代码是如何实现的?” 反射(reflection) Queryable.OfType,我看到(经过一些清理):
我正在尝试使用 ngrx/store 开发应用程序,但出现错误。无法弄清楚问题。有人帮帮我吗? 这是我的错误: ERROR in src/app/store/effects/authenticatio
在TPH继承中,这之间有什么区别吗: context.Firms.OfType() 还有这个: context.Firms.Where(item => item is RedFirm); 在性能方面?
我正在尝试过滤我的实体中的派生类,但出现异常。 var filtered = db.PersonSet.OfType(). Where(person =>person.G
我有一行代码可以清除表单中的所有标签 Controls.OfType().ToList().ForEach(p => p.Visible = false); 现在我需要从该列表(如标题标签)中排除特定
我有以下词典: public Dictionary Items; 现在我需要获取字典项的值 来自特定类型的所有项。 (例如“int”) var intValues = Items.OfType>根本行
在我的 WPF 应用程序中,我有以下行: var windowList = Application.Current.Windows.OfType().ToList(); 这将返回 2 个结果。这些结果
我正在努力理解我可以做以下事情。我有一个带有静态列表的抽象类,它应该存储任何派生类的对象。同样在抽象类中,我有方法应该只处理调用派生类的对象。但是我该怎么做呢? GetType() 或 typeof(
考虑使用以下代码行: List listOfDivs = this.clientGrid.Controls.OfType() .To
假设我有一个父实体“公司”和一些继承自公司的子实体。假设子项名为“RedFirm”、“GreenFirm”和“BlueFirm”,如果我只想检索 RedFirm 和 GreenFirm 实例,查询 F
我有一个 linq 查询,它选择占位符中的所有文本框并使用结构将它们添加到列表中。我需要扩展此功能以同时获取 DropDownList 的选定值我很确定我做错了,因为当我调试该方法时,列表计数为 0。
我发誓这没有意义。 鉴于我有这个 HttpRouteCollection从 Web API,我根据一些自定义路由类型进行过滤,特别是 IAttributeRoute .我用 httpRoutes.Of
我想过滤 List 中的对象使用它们的类型,使用 OfType<>。 我的问题是,有些对象是通用接口(interface)类型,但它们没有自己的公共(public)继承接口(interface)。 我
除了可读性之外,以下 linq 查询之间的区别是什么以及我何时以及为什么要使用一个而不是另一个: IEnumerable items = listOfItems.Where(d => d is T).
OfType() 是如何工作的? 我读了this link关于发生了什么,但 LINQ 提供程序究竟如何知道如何获取与指定类型匹配的所有对象。我知道 IQueryable “链接”请求,然后在 Get
我有一个包含很多项目的 MenuStrip,我正在尝试让它们都订阅,所以我正在尝试做 menuStrip1.Items.OfType();对于每一个我都这样做: menuitem.Click += n
...或者,我如何通过它们实现的接口(interface)过滤一系列类? 假设我有一个继承自 Foo 的对象序列,即 seq。 .换句话说,我的序列将包含 Foo 的四个不同子类中的一个或多个。 每个
我有类似于以下的类: public abstract class Base { } public class Concrete : Base { } public class Cement : Bas
我是一名优秀的程序员,十分优秀!