- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我面对的是这段代码的问题:
enumerable.OfType<Foo>().Any(x => x.Footastic == true);
public class Foo
{
public void DoSomeMagicWithCollection(IEnumerable enumerable)
{
lock (enumerable)
{
enumerable.OfType<Foo>().Any(x => x.Footastic == true);
}
}
}
最佳答案
如果您在枚举时发现基础集合已发生更改,这是一个异常(exception),因为这段代码显然不会改变集合本身,则意味着在您尝试对其进行迭代时,另一个线程正在对该集合进行变异。
除了简单地不执行之外,没有其他解决方案。发生的是List
的枚举数(或任何其他收集类型)抛出异常并阻止了进一步的枚举,因为它可以看到列表在枚举期间被修改。包裹它的OfType
的Any
枚举数无法从中恢复。基础枚举器拒绝向他们提供列表中的数据。他们对此无能为力。
您需要使用某种同步机制来防止另一个线程使该线程枚举此集合的wntle突变。您的lock
不会阻止另一个线程使用该集合,而只是阻止运行锁定在同一实例上的任何代码。您需要具有任何可能使列表发生变异的代码,并将它们锁定在同一对象上以正确同步它们。
另一种可能性是使用一个固有设计为可以同时从多个线程访问的集合。 System.Collections.Concurrent
命名空间中有几个这样的集合。它们可能符合您的需求,也可能不符合您的需求。他们将负责自己同步对数据的访问(到某个点),而无需在访问它们时显式锁定。
关于c# - 线程安全的OfType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22044996/
我有以下代码,用于检测 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
我是一名优秀的程序员,十分优秀!