0

のように動作するはずの配列メンバーを持つ C# クラスを作成していListます。ブック リストにブックを追加するときに、次のような構文が必要です。

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

この本を配列に追加する必要があります。その配列に追加するすべての本を追跡します。

私はまた、次のようなものを書くことができるようにしたい:

book.delete[2];

配列から 3 番目の本を削除します。

これを達成するための最良の方法は何ですか?

4

3 に答える 3

0

Linq を使用してオブジェクトを作成し、コレクションにGeneric Listを使用できます

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

If you want to add and remove items at will, then an array might not be the best choice. Resizing arrays is relatively expensive; it is better to use something like a list (as suggested by Shahrooz Jefri).

Also, I would shift the add/remove operation away from the book itself and towards the collection. Better to do:

bookList.Add(...)

...than...

book.Add(...)
于 2013-03-03T13:24:50.100 に答える
0

OOP の観点からは、より良い方法は、Shahrooz Jefri が指摘したように Generic List を使用することです。カスタム クラスまたは構造体「Book」を作成します。これには、メンバー フィールド「string firstName」、「string lastName」、 「文字列タイトル」、および「年」。

次に、このように本のリストを作成します。

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 に答える