2013-03-14 57 views
0

我有一个包含书的集合类。我有一个删除方法,我想要使用,并且是在添加书籍之后。这里是我的书:删除集合类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参数”

我做什么IM wron G?

+1

你为什么不使用'List '?这是作业吗? – Dai 2013-03-14 10:26:44

+2

你能举一个更完整的例子吗? myList是你写的类型吗?你为什么不使用'System.Collections.Generic.List '? – 2013-03-14 10:26:51

+2

为什么不使用标准的'List'?它有一个内置的'Remove'方法。http://msdn.microsoft.com/en-us/library/cd666k3e.aspx – Arran 2013-03-14 10:27:07

回答

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。当微软已经创建并优化它时,毫无意义的重新发明。

一个额外的提示,尽管这不会影响您的代码,但命名方法的标准是帕斯卡尔案例。所以你应该把它叫做RemoveItem而不是removeItem

+0

这个答案很有意义。然而,我很好奇,为什么调用removeItem(0)由于类型转换错误而不会编译错误? – Fendy 2013-03-14 10:45:33

+0

@Fendy我对此很好奇,我的假设是有一些代码没有被显示,因为他没有使用任何试图在没有任何参数的情况下调用removeItem的代码。 我试图解释错误信息的意思,因为我不认为目前形式的问题有一个有限的答案。 我想我可以说得更清楚。 – Amicable 2013-03-14 12:10:36