草庐IT

$foreach

全部标签

c# - foreach 怎么知道迭代集合被修改了呢?

当我修改使用foreach循环访问的集合时,出现异常。所以我很好奇foreach(或运行时)如何检测到它。是否可以用一般对象这样做? 最佳答案 集合本身必须检测它。在标准库集合中,这是通过拥有一个内部版本号来实现的,该版本号由每个操作修改,并在每次迭代时由迭代器检查(即每次调用MoveNext它检查版本号与创建迭代器时相同。 关于c#-foreach怎么知道迭代集合被修改了呢?,我们在StackOverflow上找到一个类似的问题: https://stack

c# - 为什么负枚举成员最后被 foreach 枚举?

在C#中,如果我们定义一个enum,其中包含一个对应于负值的成员,然后我们迭代该enum的值,则负值不会先来,但最后。为什么会这样?在其他语言(C、C++、Ada等)中,遍历enum将为您提供定义它的顺序。MSDN有一个很好的exampleofthisbehavior:usingSystem;enumSignMagnitude{Negative=-1,Zero=0,Positive=1};publicclassExample{publicstaticvoidMain(){foreach(varvalueinEnum.GetValues(typeof(SignMagnitude))){C

c# - List.ForEach 在技术上是 LINQ 的一部分吗?

目前对我来说,LINQ只是一个松散的、无定形的概念云,通常与数据访问有关,但也与lambda表达式、委托(delegate)、匿名函数和扩展方法结合,它是关于字符串和集合操作的,所以我想把它固定下来。当我写下面的代码时,我能说我在“使用LINQ”吗?Listwords=newList(){"one","two","three"};words.ForEach(word=>Console.WriteLine(word.ToUpper()));例如“ForEach”方法被广泛称为“LINQ方法”,但它的家在System.Collections.Generic.List而不是System.Li

c# - IEnumerable - 更新 foreach 循环内的对象

我有一个非常简单的程序,它创建了一堆对象并遍历它们以设置每个对象的Priority属性。staticvoidMain(string[]args){foreach(varobjinObjectCreator.CreateObjectsWithPriorities())Console.WriteLine(String.Format("Object#{0}haspriority{1}",obj.Id,obj.Priority));}classObjectCreator{publicstaticIEnumerableCreateObjectsWithPriorities(){varobjs=n

c# - 将 foreach 与 ArrayList 一起使用 - 自动转换?

ArrayListx=newArrayList();x.Add(10);x.Add("SS");foreach(stringsinx){}这是否意味着当foreach运行时它会尝试将数组列表的元素转换为foreach表达式中的类型? 最佳答案 是的,如果一个元素不能转换为该类型,您将得到一个InvalidCastException。在您的情况下,您不能将盒装int转换为string导致抛出异常。本质上,它等同于:foreach(object__oinlist){strings=(string)__o;//loopbody}

c# - 重载索引器以具有 foreach'able 类

我试图做这样的事情,但这不起作用:classGarage{privateListcars=newList();publicCarthis[inti]{get{returncars[i];}}//...}Garageg=newGarage();//getCS1579-noGetEnumeratordefinitionforeach(Carcing){//...}由于MSDN说索引器可能会过载,所以我决定在这里请教专家。如何重载索引器配合foreach循环? 最佳答案 foreach与indexers无关.您需要声明一个GetEnume

c# - 在 foreach 循环内外调用 SaveChanges() 有什么区别?

假设在循环内对EF实体进行了更改,在foreach循环或循环外调用EFSaveChanges()之间是否存在任何性能优势/技术差异? 最佳答案 是的!如果您在循环内调用它,EF将为每个实体将更改写回数据库(并且每个实体都将在其自己的单独事务中)。反过来,您将进行所有更改,EF将在循环后一次将它们写回(所有实体一起在一个事务中)。作为一般经验法则(无需实际查看您的代码)尝试尽可能少地调用.SaveChanges()。一次调用50次更改通常比50次调用每次1次更改更好/更快/更有效。 关于c

c# - 在通用列表的 ForEach() 的 lambda 表达式中使用条件运算符?

在ForEach的lambda表达式中不允许有条件运算符吗?Listitems=newList{"Item1","Item2","ItemICareAbout"};stringwhatICareAbout="";//doesn'tcompile:(items.ForEach(item=>item.Contains("ICareAbout")?whatICareAbout+=item+",":whatICareAbout+="");编译错误->“只有assignment、call、increment、decrement、new对象表达式才能作为语句使用”尝试使用正常的if也不起作用://

c# - Task.Factory.StartNew 或 Parallel.ForEach 用于许多长时间运行的任务?

这个问题在这里已经有了答案:9年前关闭。PossibleDuplicate:Parallel.ForEachvsTask.Factory.StartNew我需要在ThreadPool中运行大约1,000个任务每晚一次(这个数字将来可能会增加)。每个任务都在执行长时间运行的操作(从Web服务读取数据)并且是非CPU密集型.AsyncI/O不是此特定用例的选项。给定一个IList参数,我需要DoSomething(stringx).我试图在以下两个选项之间进行选择:IListtasks=newList();foreach(varpinparameters){tasks.Add(Task.F

c# - List<T>.ForEach 带索引

我正在尝试查找与以下代码等效的LINQ:NameValueCollectionnvc=newNameValueCollection();Listdonations=newList();donations.Add(newBusinessLogic.Donation(0,"","","");donations.Add(newBusinessLogic.Donation(0,"","","");donations.Add(newBusinessLogic.Donation(0,"","","");for(vari=0;i我希望我可以使用类似的东西:NameValueCollectionnvc