Files
crtr/Assets/Cryville/Crtr/CastedList.cs
2023-03-26 23:25:20 +08:00

92 lines
2.3 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
namespace Cryville.Crtr {
public class CastedList<T> : IList<T>, IList, IReadOnlyList<T> {
readonly IList _list;
public CastedList(IList list) {
_list = list;
}
public T this[int index] {
get { return (T)_list[index]; }
set { _list[index] = value; }
}
object IList.this[int index] {
get { return _list[index]; }
set { _list[index] = value; }
}
public int Count { get { return _list.Count; } }
public bool IsReadOnly { get { return _list.IsReadOnly; } }
public bool IsFixedSize { get { return _list.IsFixedSize; } }
public bool IsSynchronized { get { return _list.IsSynchronized; } }
public object SyncRoot { get { return _list.SyncRoot; } }
public void Add(T item) { _list.Add(item); }
public int Add(object value) { return _list.Add(value); }
public void Clear() { _list.Clear(); }
public bool Contains(T item) { return _list.Contains(item); }
public bool Contains(object value) { return _list.Contains(value); }
public void CopyTo(T[] array, int arrayIndex) { _list.CopyTo(array, arrayIndex); }
public void CopyTo(Array array, int index) { _list.CopyTo(array, index); }
public IEnumerator<T> GetEnumerator() { return new Enumerator(this); }
class Enumerator : IEnumerator<T> {
readonly CastedList<T> _list;
int _index;
public T Current { get; private set; }
object IEnumerator.Current { get { return Current; } }
public Enumerator(CastedList<T> list) {
_list = list;
}
public void Dispose() { }
public bool MoveNext() {
if (_index >= _list.Count) return false;
Current = _list[_index];
_index++;
return true;
}
public void Reset() { _index = 0; }
}
public int IndexOf(T item) { return _list.IndexOf(item); }
public int IndexOf(object value) { return _list.IndexOf(value); }
public void Insert(int index, T item) { _list.Insert(index, item); }
public void Insert(int index, object value) { _list.Insert(index, value); }
public bool Remove(T item) {
if (!_list.Contains(item)) return false;
_list.Remove(item);
return true;
}
public void Remove(object value) { _list.Remove(value); }
public void RemoveAt(int index) { _list.RemoveAt(index); }
IEnumerator IEnumerable.GetEnumerator() { return _list.GetEnumerator(); }
}
}