type のフィールドがありICollection<T>
ます。読み取り専用にする簡単な方法はありますか?
ReadOnlyCollection<T>
クラスがを受け取ることに注意してください。ユーザーがコレクションを変更できないようIList<T>
にする方法を探しています。ICollection<T>
元を使用してAsEnumerable
。メソッドは、元の型にキャストバックされる可能性があるため、それを保証するものではありませんList
。
type のフィールドがありICollection<T>
ます。読み取り専用にする簡単な方法はありますか?
ReadOnlyCollection<T>
クラスがを受け取ることに注意してください。ユーザーがコレクションを変更できないようIList<T>
にする方法を探しています。ICollection<T>
元を使用してAsEnumerable
。メソッドは、元の型にキャストバックされる可能性があるため、それを保証するものではありませんList
。
私はいつも、ReadOnlyCollection<T>
本当に読み取り専用のリストが少し奇妙だと思っていました。
とICollection<T>
はいえ、これは非常に単純なインターフェースであり、 true を実装するのは簡単ですReadOnlyCollection<T>
:
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();
}
}
.NET 4.5 では、新しいインターフェイスバリアンス機能をサポートする実際の読み取り専用インターフェイスもあることに注意してください。IReadOnlyCollection<T>