Заголовок говорит все
Почему String
реализует IEnumerable
, а не IList
?
Строка имеет длину, и вы уже можете брать элементы из определенного индекса.
И можно указать, что он неизменяем с ICollection
.
Так что же с ним не так? Я что-то упускаю?
На это указывают многие ответы:
Не существует интерфейса только для списков / коллекций только для чтения, но, как показывает ReadOnlyCollection
, я думаю, что это определенно возможно, и с его IsReadOnly
свойством, предназначенным для таких случаев.
public class String : IList<char>
{
int IList<char>.IndexOf(char item)
{
// ...
}
void IList<char>.Insert(int index, char item)
{
throw new NotSupportedException();
}
void IList<char>.RemoveAt(int index)
{
throw new NotSupportedException();
}
char IList<char>.this[int index]
{
set
{
throw new NotSupportedException();
}
}
void ICollection<char>.Add(char item)
{
throw new NotSupportedException();
}
void ICollection<char>.Clear()
{
throw new NotSupportedException();
}
public bool Contains(char item)
{
// ...
}
public void CopyTo(char[] array, int arrayIndex)
{
// ...
}
int ICollection<char>.Count
{
get { return this.Length; }
}
public bool IsReadOnly
{
get { return true; }
}
bool ICollection<char>.Remove(char item)
{
throw new NotSupportedException();
}
// ...
}