假设我有一个字典,我按特定顺序添加每个键和值条目。现在,如果我希望稍后能够以添加条目的相同顺序迭代此Dictionary,这是我在该字典上使用简单的foreach循环获得的顺序吗?如果没有,我会很高兴听到我该怎么做,我知道这可以用List而不是Dictionary轻松完成,但我不想到。谢谢 最佳答案 普通的Dictionary不保证项目的顺序。你需要OrderedDictionary如果您想维护添加到其中的订单项目。请注意,在.Net框架中没有此类的通用版本,因此要么必须放弃一些类型安全性,要么找到其他实现(即https://www
我们使用for或foreach循环遍历集合并处理每个条目。C#中所有这些用于集合的新lambda函数是否有替代方案?传统的做法foreach(varvinvs){Console.write(v);}有没有类似的东西?vs.foreach(v=>console.write(v)) 最佳答案 List有ForEach方法,但是IEnumerable没有。关于这个有很多问题/答案。我认为它没有在IEnumerable中实现的主要原因是Enumerables上的Linq“意味着”没有副作用,因为它是一种查询语言。EricLippert在他的
更新:我感谢所有的评论,这些评论基本上包含了一致的反对意见。虽然提出的每一个反对意见都是有效的,但我觉得棺材上的最终钉子是Ani'sastuteobservation最终,即使是这个想法表面上提供的一个微小好处——消除样板代码——也被这个想法本身需要其拥有样板代码。所以,是的,相信我:这将是一个坏主意。只是为了在某种程度上挽救我的尊严:我可能会为了争论而夸大它,但我从来没有真正接受过这个想法-只是想听听其他人对此有何评论。诚实。在您将这个问题视为荒谬之前,我请您考虑以下几点:IEnumerable继承自*IEnumerable,这意味着任何实现IEnumerable的类型通常必须实现两
有没有一种方法可以使用foreach循环向后或以完全随机的顺序遍历集合? 最佳答案 使用System.Linq你可以做...//Listlist;foreach(variinlist.Reverse()){}对于随机顺序,您必须使用list.OrderBy(另一个Linq扩展)对其进行随机排序,然后迭代该有序列表。varrnd=newRandom();varrandomlyOrdered=list.OrderBy(i=>rnd.Next());foreach(variinrandomlyOrdered){}
这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:C#foreachvsfunctionaleach这是一个关于代码可读性的问题。我有一个XDocument和一个List包含我需要屏蔽的敏感信息的元素的名称(在此示例中用下划线替换)。XDocumentxDoc;ListpropertiesToMask;这可以用两种方式编写,使用传统的foreach循环,或使用.ForEach具有lamba语法的方法。foreach(stringpropertyToMaskinpropertiesToMask){foreach(XElementelementinxDoc.Des
我有一个ForEach循环来处理相当大的联系人列表。我没有在这个主循环中做一堆处理,而是调用一个方法,该方法又调用一个方法等。方法调用其他类中的其他方法,可能是其他命名空间。如果检测到条件并且我想继续进行下一个联系,我该如何中断当前方法?我在距主ForEach循环几个级别的方法中。通常,您可以在ForEach中使用continue关键字跳到集合中的下一个元素。continue在这种情况下不是一个选项。当我键入continue时,它会带有红色下划线和“Unresolved消息”注释。那么,我该怎么办? 最佳答案 你走错了路;退后一步,
编译器编译一个foreach循环成类似for的东西在foreach时循环与数组一起使用。编译器编译一个foreach循环成类似while的东西在foreach时循环与IEnumerable一起使用或IEnumerable.那么这是否意味着foreach纯粹是syntacticsugar?或者它有什么复杂的东西吗?CLR是否知道foreach?有什么专门为foreach设计的吗?在MSIL代码中? 最佳答案 它是纯粹的语法糖,没有它您也可以获得相同的行为,是的。许多其他事情是相同的...for、while等...错误引用阿基米德:“给
编辑:我已经检查并尝试了在SE上发现的许多其他程序集未引用问题,但我没有发现很多处理应该是内置程序集的问题(System.Collections.Generic.List)。这使得手动添加或删除引用等变得困难。我正在尝试从API响应构建PartialView。我已确认响应正确且格式正确,我的对象正在正确构建,但是当我生成局部View时,显示的是编译错误。CompilerErrorMessage:CS0012:Thetype'System.Collections.Generic.List`1'isdefinedinanassemblythatisnotreferenced.Youmust
我有一些代码在名为ListofObjects的obj对象列表上像这样工作:ListNewListofObjects();Parallel.ForEach(ListofObjects,obj=>//DosomeoperationshereonobjtogetanewobjNewListofObjects.Add(newobj););现在我退出了Parallel.ForEach循环,我想对NewListofObjects进行操作。但是,当我尝试执行以下操作时出现此错误:“尝试读取或写入protected内存。这通常表示其他内存已损坏”。这是因为我的NewListofObjects.Add(
不知何故,我似乎无法在C#的foreach循环中进行字符串替换。我的代码如下:foreach(stringsinnames){s.Replace("pdf","txt");}我对LINQ还是很陌生,所以如果这听起来很业余,请原谅我;) 最佳答案 您说您正在寻找LINQ解决方案...这很简单:varreplacedNames=names.Select(x=>x.Replace("pdf","txt"));我们不知道names的类型,但如果您想重新分配给它,您可以使用ToArray或ToList://IfnamesisaListname