这应该可以解决问题,但我强烈建议重新设计组合,您将在内部存储 List
public class MyItemList : List<MyItem>
{
public MyItemList(){}
public MyItemList(IEnumerable<MyItem> sequence): base(sequence) {}
public MyItemList cutOff(int count)
{
MyItemList result = new MyItemList(this.GetRange(0, count));
this.RemoveRange(0, count);
return result;
}
}
还可以考虑创建列表的开放泛型类型,例如MyList<T> : List<T>
,MyList<T> : List<T> where T : MyItem
以便该类的客户端可以利用泛型
编辑:好的,我已经List<T>
为扩展方法实现了通用版本,这将帮助您对 MyItemList 类之外的列表进行更通用的逻辑
public static class ListExtensions
{
public static List<T> CutOff<T>(this List<T> list, int count)
{
var result = list.GetRange(0, count);
list.RemoveRange(0, count);
return result;
}
}
现在你可以
var list = new List<int> {1,2,3,4,5,6};
Console.WriteLine ("cutted items:");
Console.WriteLine (string.Join(Environment.NewLine, list.CutOff(2)));
Console.WriteLine ("items in list:");
Console.WriteLine (string.Join(Environment.NewLine, list));
印刷:
cutted items:
1
2
items in list:
3
4
5
6
另一个注意事项:
我建议这样做
public class MyItemList<T> : IList<T> where T : MyItem
{
private List<T> list;
//here will be implementation of all methods required by IList
//that will simply delegate to list field
}
请注意,如果所有逻辑MyItemList
都是通用的(可以应用于List<T>
, likeCutoff
方法),您可能不需要单独的类。也是where T : MyItem
可选的,仅当您访问MyItem
在 MyItemList中定义的方法时才需要