草庐IT

ienumerator

全部标签

c# - 从 IEnumerable<IEnumerable<T>> 获取 IEnumerable<T>

公共(public)类项目{...publicclassOrder{publicListItems...}publicclassCustomer{publicListOrders...}现在,我需要使用LINQ获取客户购买的所有商品。我该怎么办?我试过类似varitems=fromoincust.Ordersselecto.Items;的东西但结果是IEnuberable>我只想要一个IEnumerable.我在这里要求尽量避免编码2个循环。 最佳答案 你需要SelectMany,在查询表达式中表示为第二个(及后续)from子句:v

c# - string.Join 需要采用数组而不是 IEnumerable 的原因是什么?

正如标题所说:为什么string.Join需要采用数组而不是IEnumerable?这让我很烦,因为当我需要从LINQ表达式的结果创建一个连接的字符串时,我必须添加一个.ToArray()。我的经验告诉我,我在这里遗漏了一些明显的东西。 最佳答案 升级到.NET4.0并使用overload接受IEnumerable.否则,只能接受这是一个长期悬而未决的问题,直到.NET4.0才得到解决。您也可以通过创建自己的扩展方法来解决这个问题!publicstaticclassStringEnumerableExtensions{publics

c# - 将数组转换为 IEnumerable<T>

令我惊讶的是,我得到以下声明:publicstaticIEnumerableAllEnums=>Enum.GetValues(typeof(SomeType));提示无法从System.Array转换为System.Collection.Generic.IEnumerable。我认为后者是从前者继承而来的。显然我错了。因为我无法对其进行LINQ或.ToList,所以我不确定如何正确处理它。我宁愿避免显式转换,因为它是enum的一堆值,我不认为asSomeType-ing它会有多大用处,也. 最佳答案 通用Array基类没有类型,因此

c# - 检查 IEnumerable<object> 是否为 IEnumerable<int>

我已经IEnumerable类型变量。IEnumerableitems=newobject[]{1,2,3};检查它是否为IEnumerable的最佳方法是什么??我试过了typeof(IEnumerable).IsAssignableFrom(items.GetType())typeof(IEnumerable).IsInstanceOfType(items)itemsisIEnumerable但是,Re-Sharper会提示所有这些问题。就我而言,IEnumerableitems类型为IEnumerable在大多数情况下。我想在类型为IEnumerable时执行某些操作以及其他类型

c# - 检查 IEnumerable 是否少于一定数量的项目而不引起任何不必要的评估?

有时我期望有一定范围的项目,需要进行一些验证以确保我在该范围内。最明显的方法是将集合中的项目数与范围进行比较。publicstaticboolIsWithinRange(thisIEnumerableenumerable,intmax){returnenumerable.Count()尽管如此,我的理解是linqCount()方法会在返回结果之前评估整个枚举。理想情况下,我只会对最少数量的项目进行评估以获得我的结果。在不引起任何不必要的评估的情况下确保可枚举项少于特定数量的最佳方法是什么? 最佳答案 不要使用Count(),如您所知

c# - 更改 IEnumerator<T>.Current 的属性

今天我很惊讶地观察到以下行为:给定一个类classFoo{propintFooNumber{get;set;}}和这段代码IEnumerablefoos=Enumerable.Range(0,3).Select(newFoo());foreach(varfooinfoos)foo.Bar=5;foreach(varfooinfoos)Console.Write(foo.Bar);//Writes000初始化时foos至newList{newFoo(),newFoo(),newFoo()}使循环写入“555”。我的问题:为什么会发生这种情况,有没有办法在不使用.ToList()的情况下避

c# - 我应该转换我的 lambda 还是转换 IEnumerable?

在我的项目中,我有一个MyClass实现了IMyClass。我需要通过转换其他项目的列表来返回IMyClass的列表。为简单起见,假设我可以创建一个MyClass,只需将另一个项目传递给它的构造函数,即newMyClass(item)。考虑以下两行,它们(据我所知)产生相同的结果:varoption1=items.Select(item=>newMyClass(item)).Cast().ToList()varoption2=items.Select(item=>newMyClass(item)asIMyClass).ToList()在我看来,选项#1需要双重枚举,一次是将所有项目转换

c# - 如何将新项目插入 IEnumerable

我从Enum创建了一个下拉列表。publicenumLevel{Beginner=1,Intermediate=2,Expert=3}这是我的扩展。publicstaticSelectListToSelectList(thisTEnumenumObj){IEnumerablevalues=Enum.GetValues(typeof(TEnum)).Cast();varresult=fromTEnumeinvaluesselectnew{ID=(int)Enum.Parse(typeof(TEnum),e.ToString()),Name=e.ToString()};vartempVal

c# - 将对象转换为 IEnumerable<T>,其中 T 未知

我正在尝试使用Reflection并遇到以下情况。在下面的代码中,我们假设“obj”的类型可以是IEnumerable或ICollection或IList.我想将此System.Object转换为IEnumerable总是(因为ICollection和IList继承自IEnumerable无论如何),所以我想枚举集合并使用反射来编写单个项目。这背后的动机是我只是想看看一般情况下,序列化程序是否会序列化数据,因此我正在尝试模拟这种情况,希望也能理解反射。我考虑过将对象强制转换为非通用IEnumerable,但认为这会导致不必要的对象装箱,比如IEnumerable的实际实例。...我的想

c# - IEnumerator 中的 IEnumerable

我写过关于自定义IEnumerator的文章。从中生成IEnumerable的最简单方法是什么?理想的解决方案(一行代码)是是否有一些用于该目的的类。还是我必须自己创建? 最佳答案 不幸的是,没有内置方法。我有这种经常使用的扩展方法:staticIEnumerableIterate(thisIEnumeratoriterator){while(iterator.MoveNext())yieldreturniterator.Current;} 关于c#-IEnumerator中的IEnum