草庐IT

ienumerator

全部标签

c# - 实现 IEnumerable<T> 时遇到问题

我正在尝试编写我自己的(简单的)List实现。这是我到目前为止所做的:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceprovaIEnum{classMyList:IEnumerable{privateT[]_array;publicintCount{get;privateset;}publicMyList(){/*...*/}publicvoidAdd(Telement){/*...*/}//...publicIEnumeratorGetEnumerator(

c# - 如何初始化为空的 IEnumerable<Object> 并允许对其进行 Concat?

我试过将b添加到books的代码:IEnumerablebooks=null;foreach(Bookbincontext.Books.AsEnumerable())if(someConditions)books=books.Concat(new[]{b});但是在代码的最后一行给我这个错误:System.ArgumentNullException:Valuecannotbenull.Parametername:firstnullCollection似乎无法串联。我使用EF,那么我应该如何初始化我的Collection,其中没有任何东西并且我可以连接到它?

c# - 我应该支持 IEnumerable<T> 还是数组?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭6年前。Improvethisquestion在我从事的许多项目中,每当我必须返回只读集合时,我都会使用IEnumerable接口(interface)并使其类型特定,如下所示:PublicReadOnlyPropertyGetValues()AsIEnumerable(OfInteger)Get'codetoreturnthevalues'EndGetEndProperty大多数时候,我会返回一个列表,但在某些函数和只读属性中,我会

c# - yield return 仅适用于 IEnumerable<T>?

我可以使用yieldreturn吗?当返回类型是IGrouping时或IDictionary? 最佳答案 yieldreturn恰好适用于4种情况:IEnumerableIEnumerableIEnumeratorIEnumerator这是因为它要在内部建立一个状态机;字典(等)用这个是不可能的。你当然可以只return一个合适的类型。 关于c#-yieldreturn仅适用于IEnumerable?,我们在StackOverflow上找到一个类似的问题: h

c# - IEnumerable<T>.包含谓词

我只需要澄清一下,给定的集合包含一个元素。我可以通过collection.Count(foo=>foo.Bar=="Bar")>0)做到这一点但它会完成不必要的工作-迭代整个集合,而我需要在第一次出现时停止。但我想尝试使用Contains()带有谓词,例如foo=>foo.Bar=="Bar".当前IEnumerable.Contains有两个签名:IEnumerable.Contains(T)IEnumerable.Contains(T,IEqualityComparer)所以我必须指定一些变量来检查:varcollection=newList(){foo,bar};collecti

c# - 将 IEnumerable<T> 转换为 List<T>

我想知道是否可以将IEnumerable转换为List。除了将每个项目复制到列表中之外,还有其他方法吗? 最佳答案 如前所述,使用yourEnumerable.ToList()。它通过您的IEnumerable进行枚举,将内容存储在一个新的List中。您不一定要复制现有列表,因为您的IEnumerable可能会延迟生成元素。这正是其他答案所暗示的,但更清楚。这是反汇编,因此您可以确定:publicstaticListToList(thisIEnumerablesource){if(source==null){throwError.A

c# - 使用 LINQ 获取 IEnumerable 中的上一个和下一个项目

我有一个自定义类型的IEnumerable。(我从SelectMany得到的)我在那个IEnumerable中也有一个项目(myItem),我希望IEnumerable中的上一个和下一个项目。目前,我正在做这样的事情:varpreviousItem=myIEnumerable.Reverse().SkipWhile(i=>i.UniqueObjectID!=myItem.UniqueObjectID).Skip(1).FirstOrDefault();我可以通过简单地省略.Reverse来获得下一个项目。或者,我可以:intindex=myIEnumerable.ToList().Fi

c# - 如何将 IEnumerable<String> 拆分为 IEnumerable<string> 组

这个问题在这里已经有了答案:SplitListintoSublistswithLINQ(34个答案)关闭9年前。我有一个IEnumerable>我想将其分成三组,所以如果我的输入有6个项目,我将得到IEnumerable>返回两个项目,每个项目都包含一个IEnumerable我的字符串内容在里面。我正在寻找如何使用Linq而不是简单的for循环来做到这一点谢谢

c# - 如何在 C# 中访问 IEnumerable 对象中的索引?

我有一个IEnumerable对象。例如,我想基于索引访问:for(i=0;i这可能吗? 最佳答案 首先,您确定它真的是IEnumerator而不是IEnumerable吗?我强烈怀疑实际上是后者。此外,这个问题并不完全清楚。你有一个索引,你想在那个索引处得到一个对象吗?如果是这样,并且您确实有一个IEnumerable(不是IEnumerator),您可以这样做:usingSystem.Linq;...varproduct=Model.Products.ElementAt(i);如果您想枚举整个集合,但也希望每个元素都有一个索引,

c# - 为什么集合初始值设定项表达式需要实现 IEnumerable?

为什么会产生编译错误:classX{publicvoidAdd(stringstr){Console.WriteLine(str);}}staticclassProgram{staticvoidMain(){//errorCS1922:Cannotinitializetype'X'withacollectioninitializer//becauseitdoesnotimplement'System.Collections.IEnumerable'varx=newX{"string"};}}但这不是:classX:IEnumerable{publicvoidAdd(stringstr)