创建一个在c#中添加和删除数组的方法

本文关键字:添加 删除 数组 方法 一个 创建 | 更新日期: 2023-09-27 18:02:02

我正在创建一个c#类,其数组成员应该像List一样工作。当向图书列表中添加图书时,我想要一些类似于下面的语法。

book.Add(firstName = "Jack", lastName = "Reacher", title = "Dollar", year = 2005);

这本书现在应该被添加到一个数组中。我们跟踪所有我们添加到该数组中的书。

我还希望能够写这样的东西:

book.delete[2];

从数组中删除第3本书。

最好的方法是什么?

创建一个在c#中添加和删除数组的方法

从面向对象的角度来看,更好的方法是使用Shahrooz Jefri所指出的泛型列表,并创建一个自定义类或结构体"Book",它将具有成员字段"string firstName"、"string lastName"、"string title"answers"int year "。

然后,就像这样列一个书单,

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,等等。

你可以使用Linq对象和收集使用泛型列表

List<int> list = new List<int>();
    list.Add(2);
    list.Add(3);
    list.Add(5);
    list.Add(7);

如果您想随意添加和删除项,那么数组可能不是最佳选择。调整数组的大小是相对昂贵的;最好使用类似于列表的东西(如Shahrooz Jefri所建议的)。

同时,我将把添加/删除操作从图书本身转移到集合。不如这样做:

bookList.Add(...)
比…

book.Add(...)