Фредерик прав , что List<T>
реализация IList
является явной для определенных членов, особенно тех, которые представляют угрозу безопасности типов.
Реализация, которую он предлагает в своем ответе, конечно, не может быть правильной, поскольку она не будет компилироваться.
В подобных случаях типичный подход состоит в том, чтобы доблестно попытаться попытаться заставить работать интерфейсный член, но отказаться, если это невозможно.
Обратите внимание, что метод IList.Add
определен для возврата:
Положение, в которое новый
элемент был вставлен или -1 к
указать, что предмет не был
вставлен в коллекцию.
Таким образом, полная реализация возможна :
int IList.Add(object value)
{
if (value is T)
{
Add((T)value);
return Count - 1;
}
return -1;
}
Это всего лишь предположение, конечно. (Если вы действительно хотите знать наверняка, вы всегда можете использовать Reflector .) Он может немного отличаться; например, он может выдать NotSupportedException
, что часто делается для неполных реализаций интерфейса, таких как ReadOnlyCollection<T>
реализация IList<T>
. Но так как все вышеперечисленное отвечает задокументированным требованиям IList.Add
, я подозреваю, что оно близко к реальному.