c# - 施放 SynchronizedCollection只读 SynchronizedReadOnlyCollection
问题描述
我有一个List<T>
, usedAsReadOnly()
方法并将结果存储在ReadOnlyCollection<T>
. 现在我在线程中工作,需要做同样的事情,但使用SynchronizedCollection<T>
而不是List<T>
和SynchronizedReadOnlyCollection<T>
而不是ReadOnlyCollection<T>
怎么做?
解决方案
因为您可以使用构造函数根据现有SynchronizedCollection<T> : IEnumerable<T>
的初始化SynchronizedReadOnlyCollection<T>
SynchronizedCollection<T>
var readOnlyCollection = new SynchronizedReadOnlyCollection(synchronizedCollection.SyncRoot,
syncronizedCollection);
我也在考虑另一种方法。不同之处在于,使用第一种方法,您确实拥有快照,SynchronizedCollection<T>
但使用这种方法,您只有一个只读包装器(如果您向原始集合添加某些内容,它也会更新只读集合)
public static class SynchronizedCollectionExtension
{
public static IReadOnlyCollection<T> AsReadOnly<T>(this SynchronizedCollection<T> value)
{
lock (value.SyncRoot)
{
// this call is not expensive as it is just a thin wrapper around the IList<T>
return new ReadOnlyCollection<T>(value);
}
}
}
IReadOnlyCollection<int> readOnlyCollection = collection.AsReadOnly();
推荐阅读
- django - 如何在 django 中添加列表值?
- php - 如何在日历中选择一个使用 php 数据库的其他患者无法选择的日期?
- lua - 在 Lua 中实现类的最有效方法是什么?
- java - 如何更改 AWT 标签字体
- java - Calendar.set(..) not working on android 6.0
- python - Numpy:连接时出现分段错误
- javascript - 如何显示或隐藏页面重定向?
- memory - JVM8和JVM11的内存结构有区别吗?
- c# - 快照产生的低质量图片。WPF
- css - 除了标题幻灯片之外,如何在 RMarkdowns 的 ioslides 中放置徽标?