打破 foreach C#
Posted
技术标签:
【中文标题】打破 foreach C#【英文标题】:Break foreach C# 【发布时间】:2022-01-02 14:32:40 【问题描述】:我创建了一个 foreach,它可以读取 .csv 文件中的各个字段并将它们插入到 xml 文件中。 我想知道在读取一系列行(例如 10 行)后是否有可能阻塞循环。 我该怎么办?
List<string> lines = File.ReadAllLines(path).ToList();
lines.RemoveAt(0);
XmlTextWriter writer = new XmlTextWriter(savepath, Encoding.UTF8);
writer.WriteStartDocument();
writer.WriteStartElement("DC8_Recipe");
foreach (var line in lines)
var csvItem = line.Split(';');
writer.WriteStartElement("DC8_Recipe");
writer.WriteAttributeString("PlantNo", "01");
writer.WriteAttributeString("FactoryNo", "01");
writer.WriteAttributeString("No", csvItem[0].Replace('"', ' '));
writer.WriteAttributeString("Name", csvItem[2]);
writer.WriteAttributeString("ShortName", csvItem[3]);
writer.WriteEndElement();
writer.WriteStartElement("RecipeSetValueRow");
writer.WriteAttributeString("SetValue", csvItem[12]);
writer.WriteStartElement("Material");
writer.WriteAttributeString("No", csvItem[10]);
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Close();
【问题讨论】:
见docs.microsoft.com/en-us/dotnet/csharp/language-reference/… 或使用.Take(10) 添加break;
无效?
使用异步等待?
在foreach前声明int counter=0;
,在foreach结束标签前添加if (counter++)>10 break;
【参考方案1】:
有多种方法可以满足您的要求。
#1 -
贴一个计数器int counter=0
并使用此变量作为跳出循环的条件
if ((counter++) > 10 ) break;
#2(推荐方式)-
在 IEnumerable 上使用 .Take(10)
调用 Take()
将返回指定数量的连续元素
复制下面的代码并自己尝试一下
List<string> lines = File.ReadAllLines(path).ToList();
lines.RemoveAt(0);
XmlTextWriter writer = new XmlTextWriter(savepath, Encoding.UTF8);
writer.WriteStartDocument();
writer.WriteStartElement("DC8_Recipe");
foreach (var line in lines.Take(10))
var csvItem = line.Split(';');
writer.WriteStartElement("DC8_Recipe");
writer.WriteAttributeString("PlantNo", "01");
writer.WriteAttributeString("FactoryNo", "01");
writer.WriteAttributeString("No", csvItem[0].Replace('"', ' '));
writer.WriteAttributeString("Name", csvItem[2]);
writer.WriteAttributeString("ShortName", csvItem[3]);
writer.WriteEndElement();
writer.WriteStartElement("RecipeSetValueRow");
writer.WriteAttributeString("SetValue", csvItem[12]);
writer.WriteStartElement("Material");
writer.WriteAttributeString("No", csvItem[10]);
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Close();
【讨论】:
甚至File.ReadAllLines(path).Skip(1).Take(10).ToList();
或者更好的是:使用 ReadLines(path)
而不是 ReadAllLines - 那么你甚至不会阅读所有其他行以上是关于打破 foreach C#的主要内容,如果未能解决你的问题,请参考以下文章
如何在 laravel 刀片视图中打破 foreach 循环?