Tag: ienumerable

选择投影中的索引

我希望我的索引从大于0的数字开始,同时执行以下操作: var dataSource = WebConfigurationHelper.GetSupportedDomainsString().Select((domain, index) => new { index , Name = domain }); 所以我的输出成为: index=2 domain=zombieland index=3 domain=mydomain 有可能吗?

请解释System.Linq.Enumerable.Where(Func predicate)

我无法理解MSDN文档对于接受谓词的Where方法的重载,该谓词有两个参数,其中int,据说代表源元素的索引,无论这意味着什么(我认为一个可枚举的是一个顺序,你看不到下一个项目,更不用说它的任何索引)。 有人可以解释如何使用这个重载,特别是Func中的int是什么以及如何使用它?

FOREACH返回的对象的顺序是否稳定?

假设同一个集合上的两个itterations将以相同的顺序返回对象,这是安全的吗? 显然,假设该集合没有另外改变。

在C#中动态解压缩IEnumerable或最佳替代方案

让我们假设您有一个函数返回一个延迟枚举的对象: struct AnimalCount { int Chickens; int Goats; } IEnumerable FarmsInEachPen() { …. yield new AnimalCount(x, y); …. } 您还有两个使用两个独立IEnumerable的函数,例如: ConsumeChicken(IEnumerable); ConsumeGoat(IEnumerable); 如何在没有a)事先转换FarmsInEachPen() ToList()的情况下调用ConsumeChicken和ConsumeGoat ,因为它可能有两个zillion记录,b)没有multithreading。 基本上: ConsumeChicken(FarmsInEachPen().Select(x => x.Chickens)); ConsumeGoats(FarmsInEachPen().Select(x => x.Goats)); 但是没有强制双重枚举。 我可以使用multithreading来解决它,但是每个列表的缓冲队列都会变得不必要地复杂化。 所以我正在寻找一种方法将AnimalCount枚举器分成两个int枚举器而不完全评估AnimalCount 。 在锁步中一起运行ConsumeGoat和ConsumeChicken没有问题。 我能够完全理解解决方案,但我并不在那里。 我正在考虑一个辅助函数,它返回一个IEnumerable被输入到ConsumeChicken ,每次使用迭代器时,它在内部调用ConsumeGoat ,从而在锁步中执行这两个函数。 当然,除了我不想多次打电话给ConsumeGoat ..

使用具有IEnumerable的Lambda表达式树

我一直在努力学习更多关于使用Lamba表达式树的知识,因此我创建了一个简单的例子。 这是代码,如果作为C#程序粘贴,这可以在LINQPad中使用。 void Main() { IEnumerable list = GetUsers().Where(NameContains(“a”)); list.Dump(“Users”); } // Methods public IEnumerable GetUsers() { yield return new User{Name = “andrew”}; yield return new User{Name = “rob”}; yield return new User{Name = “chris”}; yield return new User{Name = “ryan”}; } public Expression<Func> NameContains(string namePart) { return u => u.Name.Contains(namePart); } // Classes public […]

LINQ从列表中的列表中获取唯一项

我有一个MyObject类型的List ,其定义如下: class MyObject { public string ListName { get; set; } public IEnumerable ObjectList { get; set;} } 给定一个MyObject类型的List ,使用LINQ我应该使用什么表达式来获取所有不同的OtherObject ? 我打算做的是循环每个MyObject并从ObjectList属性中获取不同的OtherObject ,但是我需要在列表中获得不同的。 请注意,如果: MyObject[0].Objectlist[0] == ‘ItemA’和MyObject[1].Objectlist[0] == ‘ItemA’它仍将返回ItemA的单个实例。 此代码仅是一种表示forms。 顺便说一句,这不是我访问我的对象的方式。

IEnumerable来自IEnumerator

我已经写过关于自定义IEnumerator 。 什么是从中获取IEnumerable最简单的方法? 理想的解决方案(一行代码)将是为了这个目的有一些类。 或者我必须创建自己的?

如果队列上的IEnumerable迭代器应该使项目出列

我创建了一个自定义通用队列,它实现了一个通用的IQueue接口,该接口使用System.Collections.Generic命名空间中的通用Qu​​eue作为私有内部队列。 示例已清除不相关的代码。 public interface IQueue { void Enqueue(TQueueItem queueItem); TQueueItem Dequeue(); } public class CustomQueue : IQueue { private readonly Queue queue = new Queue(); … public void Enqueue(TQueueItem queueItem) { … queue.Enqueue( queueItem ); … } public TQueueItem Dequeue() { … return queue.Dequeue(); … } } 我希望保持与核心实现的一致性,并注意到核心Queue实现了IEnumerable,所以我将通过在类上显式实现IEnumerable或使用IQueue接口inheritance它来做同样的事情。 我想知道的是,当列举队列时,如果每次移动都会使下一个项目出列? 我已经使用reflection器来了解微软是如何做到的,他们所做的就是逐步完成队列私有arrays,但微软远非绝对不可靠,所以我想获得一般意见。 public class CustomQueue : IQueue, […]

Enumerable.Last ()和C#数组

说我有一个简单的数组: double[] myDoubleArray = new double[] { 0, 1, 2, 3, 4, 5 }; 这是性能如何: double last = myDoubleArray.Last(); 这个? double last = myDoubleArray[myDoubleArray.Length – 1]; 即使可以进行上述优化,Last Last()还会枚举整个数组吗? 如果我传递了一些其他IEnumerable(比如一个已经产生的),Last() 必须枚举序列。 我更喜欢使用Last(),因为代码看起来更干净,但如果它枚举序列我就不会做出牺牲。

将IEnumerable 转换为int

如何在c#中将IEnumerable变量转换为变量中的int []?