当前位置: 首页 > 编程语言 > C#

C#-IEnumerable,GetEnumerator,一个简单的,简单的例子,拜托了!分享

时间:2023-04-10 13:11:15 C#

C#:IEnumerable,GetEnumerator,一个简单的,简单的例子,拜托!试图创建一个实现get枚举器的uebersimple类,但由于缺少简单/非功能性示例而疯狂失败。我想要做的就是围绕数据结构创建一个包装器(在本例中是一个列表,但稍后我可能需要一个字典)并添加一些函数。公共类专辑{publicreadonlystringArtist;公共只读字符串标题;公共专辑(字符串艺术家,字符串标题){艺术家=艺术家;标题=标题;}}publicclassAlbumList{privateListAlbums=newList;publicCount{get{返回Albums.Count;}}.....//这里GetEnumerator返回专辑}谢谢!您只需返回List.GetEnumerator返回的枚举器:publicclassAlbumList:IEnumerable{//...}IEnumeratorIEnumerable.GetEnumerator(){返回GetEnumerator();除了其他答案之外,如果您需要更多地控制枚举器的工作方式,或者如果您需要自定义超出底层数据结构提供的内容,则可以使用yield关键字。publicclassAlbumList:IEnumerable{publicIEnumeratorGetEnumerator(){foreach(AlbumitemininternalStorage){//您可以在此处使用条件检查或其他语句来对枚举器返回的内容进行更高程度的//控制。收益回报}项目;}}使用System.Collections;使用System.Collections.Generic;publicclassAlbumList:IEnumerable{privateListAlbums=newList();publicintCount{get{returnAlbums.Count;}}publicIEnumeratorGetEnumerator(){返回这个.Albums.GetEnumerator();}IEnumeratorIEnumerable.GetEnumerator(){返回this.GetEnumerator();}}或简化版本:publicclassAlbumList{privateListAlbums=newList();publicintCount{get{返回相册。数数;}}publicIEnumeratorGetEnumerator(){返回this.Albums.GetEnumerator();我不建议省略IEnumerable接口,因为你失去了与.NET的集成,例如使用LINQ的可能性,但您可以使用C#中的foreach遍历集合。或者这个更短:-)publicclassAlbumList:List{}当然,最后一个是一个可变列表,它可能不是你想要的。根据您希望对数据结构(列表)进行包装以及返回专辑的枚举器函数的评论,我认为您是在谈论索引器属性,对吗?方法如下:publicclassAlbum{publicreadonlystringArtist;公共只读字符串标题;公共专辑(字符串艺术家,字符串标题){艺术家=艺术家;标题=标题;}}publicclassAlbumList{privateListAlbums=newList();publicintCount{get{returnAlbums.Count;}}publicAlbumthis[intindex]{get{returnAlbums[index];}}publicAlbumthis[stringalbumName]{get{returnAlbums.FirstOrDefault(c=>c.Title==albumName);}}publicvoidAdd(Album专辑){Albums.Add(专辑);}publicvoidRemove(Albumalbum){Albums.Remove(album);}}一个Console小程序:以上是C#学习教程:C#:IEnumerable,GetEnumerator,一个简单的,简单的例子,拜托了!如果分享的内容对你有用,需要了解更多C#学习教程,希望大家多多关注——AlbumListalbums=newAlbumList();albums.Add(新专辑{Artist="artist1",Title="title1"});albums.Add(新专辑{Artist="artist2",Title="title2"});对于(inti=0;i本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处: