0

私は本のコレクションクラスを持っています。使用したい remove メソッドがありますが、それは本を追加した後です。ここに私の本があります:

myList<Book> lst = new myList<Book>();
        lst.addItem(new Book("Dumas", "Alexandre", "The Count Of Monte Cristo", 1844));
        lst.addItem(new Book ("Clark", "Arthur C",  "Rendezvous with Rama", 1972 ));
        lst.addItem(new Book("Dumas", "Alexandre", "The Three Musketeers", 1844)); ;
        lst.addItem((new Book ("Defoe",  "Daniel",  "Robinson Cruise",  1719)));
        lst.addItem(new Book ("Clark",  "Arthur C",  "2001: A space Odyssey",  1968 ));

私の削除方法は次のようになります。

public void removeItem(T item)
{
    Array.Resize(ref items, items.Count() -2);
}

したがって、たとえばリストから最初の本を削除したい場合は、次のことを試みました。

lst.removeItem(0);

しかし、「メソッド 'removeItem' のオーバーロードは 0 引数を取ります」というエラーが表示されます。

私は何を間違っていますか?

4

1 に答える 1

1

しかし、「メソッド'removeItem'のオーバーロードは0個の引数を取ります」というエラーが表示されます

私が間違っているのは何ですか?

public void removeItem(T item) // <-- code within brackets is the "overload"
{
    Array.Resize(ref items, items.Count() -2);
}

メソッド用に作成したコンストラクターは1つの引数のみを受け入れるため、メソッドに単一の引数を渡すことによってのみメソッドを利用できます。

「0引数」を受け入れる場合は、次のようなコンストラクターが必要になります。

public void RemoveItem()
{
    // your code here
}

ただし、メソッドに渡す引数が少なくとも1つ必要なため、これで問題が解決することはありません。

「メソッド'removeItem'のオーバーロードなしは0個の引数を取ります」というエラーを受け取るには、次のremoveItemように呼び出す必要があります。

RemoveItem();

したがって、CTRL + Fを押してRemoveItem();、プロジェクト内のどこにあるかを検索することをお勧めします。

あなたが作ったこのメソッドは、タイプ「T」の1つの引数を取りますremoveItem(T item)

0したがって、整数を受け入れないメソッドに整数を渡そうとしているため、エラー(型にキャストできません)メッセージが表示されます。このメソッドは「T」型を受け入れます。

多くの人がすでにコメントで述べているように、これには.NETが提供するListクラスを使用する必要があります。マイクロソフトがすでにホイールを作成して微調整している場合、ホイールを再発明する意味はありません。

追加のヒント。ただし、これはコードには影響しませんが、メソッドの命名の標準はPascalCaseです。RemoveItemだからあなたは代わりにそれを呼ぶべきですremoveItem

于 2013-03-14T10:36:04.913 に答える