首页 新闻 搜索 专区 学院

IList与Collection的区别,集合与数组的关系

0
悬赏园豆:10 [已解决问题] 解决于 2007-12-28 11:10
<P>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#0000ff> //public IList&lt;CategoryInfo&gt; GetCategories()</FONT>&nbsp;//原文<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#ff0000> public Collection&lt;CategoryInfo&gt; GetCategories()//更改后<BR></FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT color=#0000ff>//IList&lt;CategoryInfo&gt; categories = new <FONT color=#000000>//原文</FONT><BR>List&lt;CategoryInfo&gt;();</FONT><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#ff0000>&nbsp;&nbsp; Collection&lt;CategoryInfo&gt; categories = new Collection&lt;CategoryInfo&gt;();</FONT>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<FONT color=#ff0000>//更改后</FONT><BR>&nbsp;&nbsp;&nbsp;using(SqlDataReader rdr = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, SQL_SELECT_CATEGORIES, null)) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (rdr.Read()) <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CategoryInfo cat = new CategoryInfo(rdr.GetString(0), rdr.GetString(1), rdr.GetString(2));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; categories.Add(cat);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return categories;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>我更改后可以正常运行,我想问下IList与Collection的区别,集合与数组的关系</P> <P>【petshop】IList与Collection的区别,集合与数组的关系<BR>我看书后的理解:集合更好控制,安全,数组安全性差</P> <P>还有些知识有些模糊,望大家帮我指正,谢谢</P>
问题补充: 集合与数组分别用在哪些地方
伊牛娃的主页 伊牛娃 | 菜鸟二级 | 园豆:207
提问于:2007-12-26 18:24
< >
分享
最佳答案
0
IList应该称之为列表比较合适,与数组很相像但还是有区别的。 原则上讲,列表是一种有序的集合,列表与集合语义上对应的接口应该是IList和ICollection,看看MSDN就可以知道,Collection只提供迭代功能,而IList继承于ICollection,然后又提供下标索引的功能,因此它是有序的,你可以改变元素的位置。 .NET的类有些混乱,比如说这个Collection类竟然就实现了IList接口,其实这是违反直觉,容易造成混乱的事情,另外还有一个叫SortedList,它虽然叫List,但实际上并没有实现IList接口,反而是实现了IDictionary和ICollection接口。 在数据交换中使用接口而不是具体类是比较普遍的原则,类似上面其实可以不要更改GetCategories的返回类型,而直接返回一个Collection<T>实例,这样是允许的,因为对调用GetCategories的人来说,它只关心这是不是一个列表,或者是一个集合就行了,具体是什么具体类都可以,借此可以提高调用者与被调用者双方的自由度,降低耦合
Klesh Wong | 小虾三级 |园豆:780 | 2007-12-27 14:11
其他回答(1)
0
Collection<T>实现了IList<T>,因此你更改后是没有问题的,甚至可以IList<CategoryInfo> categories = new Collection<CategoryInfo>()。 Collection<T>与IList<T>的区别不是集合与数组的区别。 如果你自己要创建泛型集合,那么可以继承自Collection<T>。
麒麟.NET | 园豆:3614 (老鸟四级) | 2007-12-27 09:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册