草庐IT

C++迭代器(iterator)

全部标签

c# - (错误)使用 C# 迭代器实现协程的陷阱

我正在编写重构Silverlight程序以使用WCF服务中的部分现有业务逻辑。这样做时,我遇到了Silverlight3中的限制,它只允许对WCF服务进行异步调用,以避免长时间运行或无响应的服务调用阻塞UI线程的情况(SL有一个有趣的队列模型来调用WCF服务在UI线程上)。因此,编写曾经简单明了的内容正变得越来越复杂(请参阅问题末尾的代码示例)。理想情况下,我会使用coroutines为了简化实现,但遗憾的是,C#目前不支持协程作为本地语言工具。但是,C#确实有使用yieldreturn的生成器(迭代器)的概念。句法。我的想法是重新调整yield关键字的用途,以允许我为相同的逻辑构建一

c# - 如何从 foreach 循环中修改 foreach 迭代变量?

当我尝试这样做时...Item[,]array=newItem[w,h];//TwodimensionalarrayofclassItem,//w,hareunknownatcompiletime.foreach(variteminarray){item=newItem();}...我得到Cannotassignto'item'becauseitisa'foreachiterationvariable'。不过,我还是想这样做。想法是将默认的Item类值分配给现有项目。 最佳答案 好的,既然我们知道了您的目标,而不是您试图实现它的方式

C# 循环 : iterating through an array

如果我有如下循环:foreach(stringpassinnewstring[]{"pass1","pass2","pass3"}){x=pass;//etc}匿名字符串数组是最初创建一次,还是每次传递都重新创建一次?我相信前者,但同事们确信这是一个等待发生的错误,因为他们说foreach循环的每次迭代都会导致创建一个新的字符串数组。VS反汇编代码表明我是对的,但我想确定。我们关注这个的原因是试图理解一个神秘的错误,该错误报告在迭代时集合已被更改。 最佳答案 根据EricLippertblog和specification,forea

c# - Queue 上的 IEnumerable 迭代器是否应该使项目出列

我创建了一个实现通用IQueue接口(interface)的自定义通用队列,该接口(interface)使用System.Collections.Generic命名空间中的通用队列作为私有(private)内部队列。示例已清除不相关的代码。publicinterfaceIQueue{voidEnqueue(TQueueItemqueueItem);TQueueItemDequeue();}publicclassCustomQueue:IQueue{privatereadonlyQueuequeue=newQueue();...publicvoidEnqueue(TQueueItemqu

c# - 我想知道在迭代数据读取器对象时连接状态和 'yield' 对代码性能的影响

这是我用来从数据库中获取数据的示例代码:在DAO层上:publicIEnumerableGetDATA(ICommonSearchCriteriaDtocommonSearchCriteriaDto){using(DbContext){DbDataReaderreader=DbContext.GetReader("ABC_PACKAGE.GET_DATA",oracleParams.ToArray(),CommandType.StoredProcedure);while(reader.Read()){yieldreturnreader;}}}在BO层我调用上面的方法如下:ListGri

c# - 迭代器 block 和继承

给定一个具有以下接口(interface)的基类:publicclassBase{publicvirtualIEnumerableGetListOfStuff(){yieldreturn"First";yieldreturn"Second";yieldreturn"Third";}}我想创建一个重写方法的派生类,并添加自己的东西,如下所示:publicclassDerived:Base{publicoverrideIEnumerableGetListOfStuff(){foreach(stringsinbase.GetListOfStuff()){yieldreturns;}yield

c# - LINQ 中的 "RemoveAll"怎么可能比迭代快得多?

以下代码:Listintervals=newList();Listpoints=newList();//Initializationofthetwolists//[...]foreach(varpointinpoints){intervals.RemoveAll(x=>x.Intersects(point));}当列表的大小为~10000时,至少比这快100倍:Listintervals=newList();Listpoints=newList();//Initializationofthetwolists//[...]foreach(varpointinpoints){for(int

c# - 使用 emgu cv 迭代图像的像素

我想遍历图像的所有像素并与搜索模式进行比较。具有可能的最佳性能和C#。我找到了emgucv,它是英特尔opencv的包装器。但我不知道如何正确使用emgu。有人知道我该怎么做吗?图像的数据属性是什么?这是图像数据吗?如果是,哪个值是什么?谢谢更新:我用C#编写了我的函数,它运行良好,但速度太慢了!我已经有一个c语言的算法,我将其翻译成C#。C#比c慢3到4倍!(我的函数遍历图像的几乎每个像素以寻找图像中的形状。->Hugh变换)嗯,我听说不安全的代码可能会更快,因为它不检查数组边界和其他东西。真的吗?直接在物理机器上运行不安全代码?无论如何,我试图将不安全的代码放入我的函数中。但是我无

c# - 如何限制 foreach 循环中迭代的元素数量?

我有以下代码foreach(varrssIteminrss.Channel.Items){//...}但只想要6个项目而不是所有项目,我如何在C#中实现? 最佳答案 只需迭代集合中的前6个:foreach(varrssIteminrss.Channel.Items.Take(6)) 关于c#-如何限制foreach循环中迭代的元素数量?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/question

c# - 为什么迭代 GetConsumingEnumerable() 没有完全清空底层阻塞集合

我有一个使用任务并行库的可量化和可重复的问题,BlockingCollection,ConcurrentQueue&GetConsumingEnumerable在尝试创建一个简单的管道时。简而言之,将条目添加到默认BlockingCollection(在引擎盖下依赖于ConcurrentQueue)来自一个线程,不保证它们会从BlockingCollection中弹出。来自另一个调用GetConsumingEnumerable()的线程方法。我创建了一个非常简单的Winforms应用程序来重现/模拟它,它只将整数打印到屏幕上。Timer1负责排队工作项......它使用一个名为_tra