using System.Collections; using System.Collections.Generic; namespace Microsoft.CodeAnalysis.Utilities { internal static class IReadOnlyListExtensions { public static IReadOnlyList ToReadOnlyList(this IList list) { if (list is IReadOnlyList readOnlyList) { return readOnlyList; } return new ReadOnlyList(list); } public static T Last(this IReadOnlyList list) { return list[list.Count - 1]; } public static int IndexOf(this IReadOnlyList list, T item) { for (int i = 0; i < list.Count; ++i) { if (list[i].Equals(item)) { return i; } } return -1; } private class ReadOnlyList : IReadOnlyList { private readonly IList _list; public ReadOnlyList(IList list) { _list = list; } public T this[int index] => _list[index]; public int Count => _list.Count; public IEnumerator GetEnumerator() => _list.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => _list.GetEnumerator(); } } }