IEnumerable是不是一直不能实现

king19840811 2008-11-07 01:04:14
如题
...全文
788 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
singhuayang 2009-02-11
  • 打赏
  • 举报
回复
能实现 c#高级编程里泛型这一章讲的很清楚
king19840811 2008-11-07
  • 打赏
  • 举报
回复
已经实现了..原来IEnumerable<T>是继承于IEnumerable所以需要实现IEnumerable的GetEnumerator方法
king19840811 2008-11-07
  • 打赏
  • 举报
回复
why 给讲讲什么问题.
vrhero 2008-11-07
  • 打赏
  • 举报
回复
无语了...

楼主...去认真看书吧...
king19840811 2008-11-07
  • 打赏
  • 举报
回复
class container<T>:IEnumerable<T>
{
T[] cont;


public container(int size)
{
cont = new T[size];
}
public IEnumerator<T> GetEnumerator()
{
return cont.GetEnumerator();
}
}
这样的话实现不了..
norikos 2008-11-07
  • 打赏
  • 举报
回复
貌似楼主把泛型和接口实现的概念 混在一起了。
看下面的例子 就实现了IEnumerable<T>
public class Demo<T>:IEnumerable<T>
{
private List<T> mTList=new List<T>();
//其他操作
public IEnumerator<T> GetGetEnumerator()
{
return mTList.GetEnumerator();
}
}

接口实现和泛型是两个没有关系的技术概念。

king19840811 2008-11-07
  • 打赏
  • 举报
回复
用泛型类实现啊..如果都指定了IEnumerable<int>了还用泛型做什么
hejialin666 2008-11-07
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wjp_116 的回复:]
引用 8 楼 vrhero 的回复:
给你个只实现IEnumerable <T>的例子...

C# codeclass sample : IEnumerable <int>
{
private List <int> i;

public sample()
{
i = new List <int>();
i.AddRange(new int[] { 1, 2, 3, 4, 5 });
}

public IEnumerator <int> GetEnumerator()
{
return i.GetEnumerator();
}

System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{

例子挺好的,楼主说不行,肯定是实现的时候有问题
[/Quote]
楼主没有说不行呀?你看到了?
wjp_116 2008-11-07
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 vrhero 的回复:]
给你个只实现IEnumerable <T>的例子...

C# codeclass sample : IEnumerable<int>
{
private List<int> i;

public sample()
{
i = new List<int>();
i.AddRange(new int[] { 1, 2, 3, 4, 5 });
}

public IEnumerator<int> GetEnumerator()
{
return i.GetEnumerator();
}

System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return i.GetEnumerator();
}
}
[/Quote]
例子挺好的,楼主说不行,肯定是实现的时候有问题
software820830 2008-11-07
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20050617/23/4090388.html
vrhero 2008-11-07
  • 打赏
  • 举报
回复
给你个只实现IEnumerable<T>的例子...
class sample : IEnumerable<int>
{
private List<int> i;

public sample()
{
i = new List<int>();
i.AddRange(new int[] { 1, 2, 3, 4, 5 });
}

public IEnumerator<int> GetEnumerator()
{
return i.GetEnumerator();
}

System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return i.GetEnumerator();
}
}
vrhero 2008-11-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 king19840811 的回复:]
只实现IEnumerable <T>用了实现不了.
[/Quote]
不可能...你怎么实现的?
king19840811 2008-11-07
  • 打赏
  • 举报
回复
只实现IEnumerable<T>用了实现不了.
周公 2008-11-07
  • 打赏
  • 举报
回复
可以的,你可以自己去写嘛。
如果要实现的话,建议同时实现IList<T>, ICollection<T>, IEnumerable<T>,这些都是针对集合的。
周公 2008-11-07
  • 打赏
  • 举报
回复
public class List<T> : IList<T>, ICollection<T>, 
IEnumerable<T>, IList, ICollection, IEnumerable


List 类是 ArrayList 类的泛型等效类。该类使用大小可按需动态增加的数组实现 IList 泛型接口。

List 类既使用相等比较器又使用排序比较器。

诸如 Contains、IndexOf、LastIndexOf 和 Remove 这样的方法对列表元素使用相等比较器。类型 T 的默认相等比较器按如下方式确定。如果类型 T 实现 IEquatable 泛型接口,则相等比较器为该接口的 Equals 方法;否则,默认相等比较器为 Object.Equals(Object)。

诸如 BinarySearch 和 Sort 这样的方法对列表元素使用排序比较器。类型 T 的默认比较器按如下方式确定。如果类型 T 实现 IComparable 泛型接口,则默认比较器为该接口的 CompareTo 方法;否则,如果类型 T 实现非泛型 IComparable 接口,则默认比较器为该接口的 CompareTo 方法。如果类型 T 没有实现其中任一个接口,则不存在默认比较器,并且必须显式提供比较器或比较委托。

List 不保证是排序的。在执行要求 List 已排序的操作(例如 BinarySearch)之前,您必须对 List 进行排序。

可使用一个整数索引访问此集合中的元素。此集合中的索引从零开始。

List 接受 空引用(在 Visual Basic 中为 Nothing) 作为引用类型的有效值并且允许有重复的元素。

性能注意事项
在决定使用 List 还是使用 ArrayList 类(两者具有类似的功能)时,记住 List 类在大多数情况下执行得更好并且是类型安全的。如果对 List 类的类型 T 使用引用类型,则两个类的行为是完全相同的。但是,如果对类型 T 使用值类型,则需要考虑实现和装箱问题。

如果对类型 T 使用值类型,则编译器将特别针对该值类型生成 List 类的实现。这意味着不必对 List 对象的列表元素进行装箱就可以使用该元素,并且在创建大约 500 个列表元素之后,不对列表元素装箱所节省的内存将大于生成该类实现所使用的内存。

确保用于类型 T 的值类型实现 IEquatable 泛型接口。如果未实现,则诸如 Contains 这样的方法必须调用 Object.Equals(Object) 方法,后者对受影响的列表元素进行装箱。如果值类型实现 IComparable 接口,并且您拥有源代码,则还应实现 IComparable 泛型接口以防止 BinarySearch 和 Sort 方法对列表元素进行装箱。如果您不拥有源代码,则将一个 IComparer 对象传递给 BinarySearch 和 Sort 方法。

使用 List 类的特定于类型的实现,而不是使用 ArrayList 类或自己编写强类型包装集合,这样是很有好处的。原因是您的实现必须做 .NET Framework 已经为您完成的工作,并且公共语言运行库能够共享 Microsoft 中间语言代码和元素据,这是您的实现所无法做到的。
king19840811 2008-11-07
  • 打赏
  • 举报
回复
我的意思是一个自写的类不能实现这个接口
周公 2008-11-07
  • 打赏
  • 举报
回复
List<T>不就是实现了?
chinaicm 2008-11-07
  • 打赏
  • 举报
回复
可以实现啊.
IList<T> 这个就应该实现了这个接口. 可以枚举的.

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧