从集合类c#中删除项

时间:2013-03-14 10:24:48

标签: c#

我有一本带书的收藏课。我有一个我想要使用的删除方法,那是在我添加了书籍之后。这是我的书:

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个参数”

我做错了什么?

1 个答案:

答案 0 :(得分:1)

  

但我得到一个错误,说“方法没有重载'removeItem'   取0个参数“

     

我做错了什么?

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

由于您为方法创建的构造函数只接受一个参数,因此只能通过将单个参数传递给它来使用该方法。

如果确实接受“0参数”,则需要一个如下所示的构造函数:

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

但是,当您需要至少有一个参数传递给您的方法时,这不会解决您的问题。

要接收错误“方法没有重载'removeItem'需要0参数”你必须像这样调用removeItem

RemoveItem();

所以我建议按CTRL + F并搜索RemoveItem();以查找项目中的位置。

您创建的此方法采用“T”removeItem(T item)

类型的一个参数

因此,您应该收到错误(无法转换为类型)消息,因为您将整数0传递给不接受整数的方法,它接受您的“T”类型。

正如许多人已在评论中说明的那样,您应该使用.NET提供的List class。当微软已经创建并对其进行微调时,没有必要重新发明轮子。

另外一个提示,虽然这不会影响您的代码,但命名方法的标准是Pascal Case。因此,您应该将其称为RemoveItem,而不是removeItem