저는 항상 다소 이상하다고 생각했습니다. ReadOnlyCollection<T>
은 실제로 읽기 전용 목록입니다. .NET 4.5도 약간 새로운 인터페이스 분산을 지원하기 위해 실제 읽기 전용 인터페이스가 있음을
public class TrueReadOnlyCollection<T> : ICollection<T>, IReadOnlyCollection<T>
{
private ICollection<T> _original;
public TrueReadOnlyCollection(ICollection<T> original)
{
_original = original;
}
public void Add(T item)
{
throw new NotSupportedException();
}
public void Clear()
{
throw new NotSupportedException();
}
public bool Contains(T item)
{
return _original.Contains(item);
}
public void CopyTo(T[] array, int arrayIndex)
{
_original.CopyTo(array, arrayIndex);
}
public int Count
{
get { return _original.Count; }
}
public bool IsReadOnly
{
get { return true; }
}
public bool Remove(T item)
{
throw new NotSupportedException();
}
public IEnumerator<T> GetEnumerator()
{
foreach (T t in _original)
{
yield return t;
}
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}
참고 : 말했다
, ICollection<T>
는 간단한 인터페이스, 그것은 ReadOnlyCollection<T>
사실을 구현하는 사소한 기능, 그래서 만약 당신이 위의 일을 또한 구현하는 것이 좋을 수도 IReadOnlyCollection<T>
원본 컬렉션의 복사본이 만족 스럽다면 (즉, 원래 컬렉션의 향후 변경 사항을 반영하지 않는 개체를 반환하는 경우) - IMHO 컬렉션을 배열에 복사 한 다음 반환하면됩니다. 당신이 정말로 원한다면 ReadOnlyCollection에 포장해야하지만, 그 시점에서 꼭 필요한 것은 아닙니다.) 반환 된 컬렉션이 원본에 대한 향후 변경 사항을 반영하도록하려면 내 게시 된 답변을 확인하십시오. –