我怎么能获得只有一个片段IList<>?
-
09-06-2019 - |
题
我有一类属暴露的内部IList<>通过
System.Collections.ObjectModel.ReadOnlyCollection<>
我如何可以通过一个部分的这个 ReadOnlyCollection<>
没有复制的元素进入新阵列(我需要一个现场查看,和目标设备在很短的存储器)?我是针对紧凑的框架2.0.
解决方案
尝试一种方法,返回枚举的使用率:
IEnumerable<T> FilterCollection<T>( ReadOnlyCollection<T> input ) {
foreach ( T item in input )
if ( /* criterion is met */ )
yield return item;
}
其他提示
这些foreach样很好,不过你可以使他们更加简洁,如果你使用。净3.5和皇宫:
return FullList.Where(i => IsItemInPartialList(i)).ToList();
你总是可以写一个类实现IList并转发所有通话的原始清单(所以它没有它自己的复制的数据)之后翻译的索引。
你可以使用的产量返回创建一个过滤清单
IEnumerable<object> FilteredList()
{
foreach( object item in FullList )
{
if( IsItemInPartialList( item )
yield return item;
}
}
这取决于如何你需要过滤器的收集,你可能希望创建一个类实现IList(或类型,如果这对你的作品),但渣土有关的索引和获取只返回值。例如
class EvenList: IList
{
private IList innerList;
public EvenList(IList innerList)
{
this.innerList = innerList;
}
public object this[int index]
{
get { return innerList[2*i]; }
set { innerList[2*i] = value; }
}
// and similarly for the other IList methods
}
如何做的过滤元素需要访问的?如果它通过一个迭代然后也许你可以写一个自定义的迭代,跳过的元素,你不想公开可见的?
如果你需要提供一个收集那么你可能需要编写自己的收集类,这只是代理人的潜在收集,但可以防止访问的元素,你不想公开可见。
(免责声明:我不是很熟悉,因此,这些都是一般性答案。可能有更具体的答案C#这项工作更好)
不隶属于 StackOverflow