作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我以为IEnumerable
事物是可以迭代的对象。
如果他们也是ICollection
你知道里面有多少元素。
如果它们是偶数 IList
您可以从特定索引中获取包含对象。
一个 ReadOnlyCollection<T>
实现IList<T>
。所以不会ReadOnlyList<T>
起一个更好的名字。
有没有真正的 ReadOnlyCollection<T>
在框架中?
(所以我不需要 IList 来创建这样的只读包装器)
最佳答案
如ReadOnlyCollection<T>
只是 IList<T>
的包装。不允许修改列表,应该很容易为 ICollection<T>
生成类似的包装器:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Threading;
class MyReadOnlyCollection<T> : ICollection<T>, IEnumerable<T>, ICollection, IEnumerable
{
private ICollection<T> _collection;
private object _syncRoot;
public MyReadOnlyCollection(ICollection<T> collection)
{
_collection = collection;
}
public void Add(T item)
{
throw new NotSupportedException("Trying to modify a read-only collection.");
}
public void Clear()
{
throw new NotSupportedException("Trying to modify a read-only collection.");
}
public bool Contains(T item)
{
return _collection.Contains(item);
}
public void CopyTo(T[] array, int arrayIndex)
{
_collection.CopyTo(array, arrayIndex);
}
public int Count
{
get { return _collection.Count; }
}
public bool IsReadOnly
{
get { return true; }
}
public bool Remove(T item)
{
throw new NotSupportedException("Trying to modify a read-only collection.");
}
public IEnumerator<T> GetEnumerator()
{
return _collection.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return ((ICollection)_collection).GetEnumerator();
}
public void CopyTo(Array array, int index)
{
((ICollection)_collection).CopyTo(array, index);
}
public bool IsSynchronized
{
get { return false; }
}
public object SyncRoot
{
get
{
if (_syncRoot == null)
{
ICollection list = _collection as ICollection;
if (list != null)
{
_syncRoot = list.SyncRoot;
}
else
{
Interlocked.CompareExchange(ref _syncRoot, new object(), null);
}
}
return _syncRoot;
}
}
}
关于.net - 为什么 ReadOnlyCollection<T> 不是 ReadOnlyList<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5976772/
我以为IEnumerable事物是可以迭代的对象。 如果他们也是ICollection你知道里面有多少元素。 如果它们是偶数 IList您可以从特定索引中获取包含对象。 一个 ReadOnlyColl
阅读有关在 C# 中创建只读原始向量的问题(基本上,您不能这样做), public readonly int[] Vector = new int[]{ 1, 2, 3, 4, 5 }; // You
我是一名优秀的程序员,十分优秀!