0

我正在创建一个包含数组成员的 C# 类,它应该像List. 将书添加到书单时,我想要类似于以下的语法。

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

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

我也希望能够写出类似的东西:

book.delete[2];

从数组中删除第三本书。

实现这一目标的最佳方法是什么?

4

3 回答 3

0

您可以使用 Linq 来反对和收集使用通用 列表

List<int> list = new List<int>();
    list.Add(2);
    list.Add(3);
    list.Add(5);
    list.Add(7);
于 2013-03-03T13:21:14.103 回答
0

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

此外,我会将添加/删除操作从书籍本身转移到收藏。更好的做法:

bookList.Add(...)

...比...

book.Add(...)
于 2013-03-03T13:24:50.100 回答
0

从 OOP 的角度来看,更好的方法是使用 Shahrooz Jefri 指出的通用列表 - 并制作一个自定义类或结构“Book”,其中包含成员字段“string firstName”,“string lastName”, “字符串标题”和“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 等。

于 2013-03-03T13:27:46.810 回答