我正在创建一个C#类,其数组成员应该像List
一样工作。
将书籍添加到图书清单时,我想要一些类似于以下内容的语法。
book.Add(firstName = "Jack", lastName = "Reacher", title = "Dollar", year = 2005);
现在应该将这本书添加到一个数组中。我们会跟踪我们添加到该数组中的所有书籍。
我也希望能够写出如下内容:
book.delete[2];
从数组中删除第3本书。
实现这一目标的最佳方法是什么?
答案 0 :(得分:0)
List<int> list = new List<int>();
list.Add(2);
list.Add(3);
list.Add(5);
list.Add(7);
答案 1 :(得分:0)
如果您想随意添加和删除项目,那么数组可能不是最佳选择。调整阵列大小相对昂贵;最好使用类似列表的东西(如Shahrooz Jefri所建议的那样)。
另外,我会将添加/删除操作从书本身转移到集合中。更好:
bookList.Add(...)
... ...比
book.Add(...)
答案 2 :(得分:0)
从OOP的角度来看,更好的方法就是使用Shahrooz Jefri指出的通用列表 - 并创建一个自定义类或结构“Book”,它将具有成员字段“string firstName”,“string” lastName“,”字符串标题“和”int year。“
然后,juust列出这样的书,
List<Book> books = new List<Book>();
books.Add(new Book("Jack","Reacher","Dollar",2005));
如果您需要使用静态数组实现自己的通用集合,可以执行以下操作:
public class MyList<T> {
private T[] internalArray;
private int capacity;
private int size;
public int Size { get { return size; } }
public MyList(){
this.size = 0;
this.capacity = 2; //put something you feel like is reasonable for initial capacity
internalArray = new T[2];
}
public void Add(T item){
int factor = 2; //some "growth" factor
if(this.size == this.capacity){
this.capacity *= factor;
T[] newArray = new T[this.capacity];
System.Array.Copy(this.internalArray, newArray, this.size);
this.internalArray = newArray;
}
this.internalArray[this.size] = item;
this.size ++;
}
public void RemoveAt(int index){
//write code that shifts all elements following index back by one
//decrement the size
//if necessary for mem. conservation, shrink the array capacity if half of less elements remain
}
}
当然,你必须重载[]括号运算符以进行访问,或者让它实现Enumerable等。