【问题标题】:Break foreach C#打破 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();

【问题讨论】:

标签: c# xml csv for-loop foreach


【解决方案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 - 那么你甚至不会阅读所有其他行
猜你喜欢
  • 2016-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 1970-01-01
相关资源
最近更新 更多