打破 foreach C#
Break foreach C#
我创建了一个 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();
有多种方法可以满足您的要求。
#1 -
decalre 一个计数器 int counter=0
并使用这个变量作为跳出循环的条件
if ((counter++) > 10 ) {break;}
#2(推荐方式)-
使用 .Take(10)
在 IEnumerable 上调用 Take()
将 return 指定数量的连续元素
复制下面的代码并亲自尝试
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();
}
我创建了一个 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();
有多种方法可以满足您的要求。
#1 -
decalre 一个计数器 int counter=0
并使用这个变量作为跳出循环的条件
if ((counter++) > 10 ) {break;}
#2(推荐方式)-
使用 .Take(10)
在 IEnumerable 上调用 Take()
将 return 指定数量的连续元素
复制下面的代码并亲自尝试
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();
}