Почему строка не реализует IList ?

Заголовок говорит все

Почему String реализует IEnumerable , а не IList ?

Строка имеет длину, и вы уже можете брать элементы из определенного индекса.
И можно указать, что он неизменяем с ICollection .IsReadOnly .

Так что же с ним не так? Я что-то упускаю?

На это указывают многие ответы: Не существует интерфейса только для списков / коллекций только для чтения, но, как показывает 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();
        }

        // ...
    }
5
задан ordag 22 August 2011 в 11:28
поделиться