打破 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++)&gt;10 break; 【参考方案1】:

有多种方法可以满足您的要求。

#1 - 贴一个计数器int counter=0 并使用此变量作为跳出循环的条件 if ((counter++) &gt; 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#的主要内容,如果未能解决你的问题,请参考以下文章

有啥办法可以打破 foreach 循环?

如何在 TypeScript 中打破 ForEach 循环

打破 foreach C#

如何在 laravel 刀片视图中打破 foreach 循环?

angularjs 在 $http 成功中打破 forEach

我如何打破 foreach 语句,回显其他内容然后继续