Tag: foreach

C#:List .ForEach(…)对普通foreach循环的任何好处?

我想知道为什么List.ForEach(Action)存在。 这样做有什么好处/差别: elements.ForEach(delegate(Element element){ element.DoSomething(); }); 过度 foreach(Element element in elements) { element.DoSomething();} ?

C#`foreach`行为 – 澄清?

我在这里阅读了Eric关于foreach枚举的文章以及foreach可以工作的不同场景 为了防止旧的C#版本进行装箱,C#团队为foreach启用了鸭子类型,以便在非Ienumerable集合上运行。(返回具有公共MoveNext和Current属性的公共GetEnumerator就足够了(。 所以,埃里克写了一个样本 : class MyIntegers : IEnumerable { public class MyEnumerator : IEnumerator { private int index = 0; object IEnumerator.Current { return this.Current; } int Current { return index * index; } public bool MoveNext() { if (index > 10) return false; ++index; return true; } } public MyEnumerator GetEnumerator() { return new […]

foreach和list.ForEach()之间的闭包有何不同?

考虑这段代码。 var values = new List {123, 432, 768}; var funcs = new List<Func>(); values.ForEach(v=>funcs.Add(()=>v)); funcs.ForEach(f=>Console.WriteLine(f()));//prints 123,432,768 funcs.Clear(); foreach (var v1 in values) { funcs.Add(()=>v1); } foreach (var func in funcs) { Console.WriteLine(func()); //prints 768,768,768 } 我知道第二个foreach打印768次3次因为lambda捕获的闭包变量。 为什么在第一种情况下不会发生? foreach关键字与Foreach方法有何不同? 是不是因为当我做值时,表达式被评估values.ForEach

c#修改List 中的结构

简短问题:如何修改List单个项目? (或者更确切地说,存储在List中的struct成员?) 完整说明: 首先,使用下面的struct定义: public struct itemInfo { …(Strings, Chars, boring)… public String nameStr; …(you get the idea, nothing fancy)… public String subNum; //BTW this is the element I’m trying to sort on } public struct slotInfo { public Char catID; public String sortName; public Bitmap mainIcon; public IList subItems; } public struct catInfo { […]

如何在C#中的foreach循环中访问集合中的下一个值?

我正在使用C#并使用排序的List结构。 我正在尝试迭代List并且每次迭代我都想访问列表的下一个成员。 有没有办法做到这一点? 伪代码示例: foreach (Member member in List) { Compare(member, member.next); }

asp.net mvc razor foreach循环将id添加到div

我试图在与变量i值连接的foreach循环内向div添加动态id 。 它会引发语法错误。 可能是什么问题。 我们能不使用for循环来实现这个解决方案吗? @{int i=1;} @foreach (var or in Model.Names) { @or.Name i++; }

修改foreach循环内的列表

我有一个类似的结构(但更复杂): var list = new List(); // .. populate list .. foreach(var item in list) { DoFunction(list); } public void DoFunction(List list) { if(someCondition == true) { // .. modify list in here .. } } 现在,我明白不可能编辑你正在进行的集合,但如果你必须编辑列表(没有try catch语句),你如何优雅地跳出循环? 有没有办法判断列表是否已被编辑? 你可以编辑列表并快速break; 在它通知之前?

C#中的foreach循环是否保证评估顺序?

从逻辑上讲,人们会认为C#中的foreach循环将以与递增for循环相同的顺序进行求值。 实验上,确实如此。 但是,MSDN网站上似乎没有此类确认。 这是一个明显的答案,他们不认为在网站上包含这些信息? 或者它是否有可能表现不正常?

异步并行下载文件

编辑 我已经改变了问题的标题,以反映我的问题,但也回答了如何轻松实现这一目标。 我试图让第二种方法返回Task而不是第一种方法中的Task ,但是由于尝试修复它,我得到了一连串的错误。 我在await body(partition.Current);之前添加了return await body(partition.Current); 反过来它要求我在下面添加一个return语句,所以我在下面添加了return null 但是现在select语句抱怨它无法从查询中推断出类型参数 我将Task.Run更改为Task.Run但没有成功。 我该如何解决? 第一种方法来自http://blogs.msdn.com/b/pfxteam/archive/2012/03/05/10278165.aspx ,第二种方法是我正在尝试创建的重载。 public static class Extensions { public static Task ForEachAsync(this IEnumerable source, int dop, Func body) { return Task.WhenAll( from partition in Partitioner.Create(source).GetPartitions(dop) select Task.Run(async delegate { using (partition) while (partition.MoveNext()) await body(partition.Current); })); } public static Task ForEachAsync(this IEnumerable source, […]

为什么在foreach for XmlNode中使用的var不推导出实际类型,只推导出对象?

让cls为XmlNode类型 以下语句允许我访问子节点: foreach (XmlNode child in cls.ChildNodes) 现在当我尝试使用var: foreach (var child in cls.ChildNodes) 那么子类型不是XmlNode ,只是对象 。 我不能使用child.NodeType ,编译器说: object’不包含’NodeType的定义 为什么是这样?