我想继承某种数组/向量/列表类,这样我就可以只添加一个额外的专用方法......就像这样:
public class SpacesArray : ArrayList<Space>
{
public Space this[Color c, int i]
{
get
{
return this[c == Color.White ? i : this.Count - i - 1];
}
set
{
this[c == Color.White ? i : this.Count - i - 1] = value;
}
}
}
但编译器不会让我。说
非泛型类型'System.Collections.ArrayList'不能与类型参数一起使用
我该如何解决这个问题?
答案 0 :(得分:11)
ArrayList
不是通用的。使用System.Collections.Generic中的List<Space>
。
答案 1 :(得分:2)
没有ArrayList<T>
。 List<T>
效果相当好。
public class SpacesArray : List<Space>
{
public Space this[Color c, int i]
{
get
{
return this[c == Color.White ? i : this.Count - i - 1];
}
set
{
this[c == Color.White ? i : this.Count - i - 1] = value;
}
}
}
答案 2 :(得分:2)
您可以围绕ArrayList<T>
创建一个包装器,它实现IReadOnlyList<T>
。类似的东西:
public class FooImmutableArray<T> : IReadOnlyList<T> {
private readonly T[] Structure;
public static FooImmutableArray<T> Create(params T[] elements) {
return new FooImmutableArray<T>(elements);
}
public static FooImmutableArray<T> Create(IEnumerable<T> elements) {
return new FooImmutableArray<T>(elements);
}
public FooImmutableArray() {
this.Structure = new T[0];
}
private FooImmutableArray(params T[] elements) {
this.Structure = elements.ToArray();
}
private FooImmutableArray(IEnumerable<T> elements) {
this.Structure = elements.ToArray();
}
public T this[int index] {
get { return this.Structure[index]; }
}
public IEnumerator<T> GetEnumerator() {
return this.Structure.AsEnumerable().GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator() {
return GetEnumerator();
}
public int Count { get { return this.Structure.Length; } }
public int Length { get { return this.Structure.Length; } }
}