我有一类属暴露的内部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#这项工作更好)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top