gpt4 book ai didi

c# - ICollection 的简单现有实现

转载 作者:太空狗 更新时间:2023-10-29 20:52:47 26 4
gpt4 key购买 nike

有没有ICollection<T>的简单实现?在 .NET 框架中? IE。一个能够添加和删除项目但没有索引的集合类。 Collection<T>绝对不适合,因为它实现了 IList也可以通过索引访问元素。

曝光Collection<T>List<T>作为ICollection<T>在我的情况下也不会起作用,因为我需要从它继承我自己的类,以及从任何其他实现 IList<T> 的类继承的类也会有索引。

我知道自己实现一个没什么大不了的,但只是觉得它应该已经存在,搜索但没有找到类似的东西。

最佳答案

这是实现 ICollection<T> 的类列表在System.Collections命名空间:

System.Collections.Concurrent.ConcurrentDictionary<TKey, TValue>
System.Collections.Generic.Dictionary<TKey, TValue>
System.Collections.Generic.HashSet<T>
System.Collections.Generic.LinkedList<T>
System.Collections.Generic.List<T>
System.Collections.Generic.SortedDictionary<TKey, TValue>
System.Collections.Generic.SortedList<TKey, TValue>
System.Collections.Generic.SortedSet<T>
System.Collections.ObjectModel.Collection<T>
System.Collections.ObjectModel.ReadOnlyCollection<T>
System.Collections.ObjectModel.ReadOnlyDictionary<TKey, TValue>
System.Collections.ObjectModel.WeakReadOnlyCollection<T>

但是所有这些实现都添加了额外的功能,并且由于您想继承一个实现,但只公开 ICollection<T>方法,使用其中任何一种都不是真正的选择。

您唯一的选择是实现您自己的。这很容易做到。您只需要包装一个合适的 ICollection<T> 实现即可。 .这是一个使用 List<T> 的默认情况下,还允许派生类使用特定类型的 ICollection<T> :

class SimpleCollection<T> : ICollection<T>
{

ICollection<T> _items;


public SimpleCollection() {
// Default to using a List<T>.
_items = new List<T>();
}

protected SimpleCollection(ICollection<T> collection) {
// Let derived classes specify the exact type of ICollection<T> to wrap.
_items = collection;
}

public void Add(T item) {
_items.Add(item);
}

public void Clear() {
_items.Clear();
}

public bool Contains(T item) {
return _items.Contains(item);
}

public void CopyTo(T[] array, int arrayIndex) {
_items.CopyTo(array, arrayIndex);
}

public int Count
{
get { return _items.Count; }
}

public bool IsReadOnly
{
get { return false; }
}

public bool Remove(T item)
{
return _items.Remove(item);
}

public IEnumerator<T> GetEnumerator()
{
return _items.GetEnumerator();
}

System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return _items.GetEnumerator();
}
}

这超出了您的要求,但例如,如果您想要存储唯一的项目,您可以从中派生并提供 HashSet<T>作为要包装的集合类型:

class UniqueCollection<T> : SimpleCollection<T>
{
public UniqueCollection() : base(new HashSet<T>()) {}
}

关于c# - ICollection<T> 的简单现有实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28247883/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com