[英]How to check and insert values to list c#
访问本地文件后,我需要检查并添加缺少的列(沃尔玛),然后再将其转换为 xml。我确认数据在 csv 文件中可用。 目前我收到“System.InvalidOperationException:'集合已修改;枚举操作可能无法执行”
string[] vs = File.ReadAllLines(@"C:/Users/Raw.csv");
var lines = new List <String>();
lines = vs.ToList();
foreach (var check in lines)
{
if (!check.Contains("Walmart"))
{
lines.Insert(0,"Walmart");
}
}
foreach (var shw in lines)
{
Console.WriteLine(shw);
}
从技术上讲,如果您只想修改当前代码,您可以计算我们应该添加多少Walmarts
:
var lines = File
.ReadLines(@"C:/Users/Raw.csv")
.ToList();
int walmartsToAdd = 0;
foreach (var check in lines)
if (!check.Contains("Walmart"))
walmartsToAdd += 1;
if (walmartsToAdd > 0)
lines.InsertRange(0, Enumerable.Repeat("Walmart", walmartsToAdd));
foreach (var shw in lines)
Console.WriteLine(shw);
但似乎,你应该修改行: abc,def
=> Walmart,abc,def
。 如果是您的情况,您可以添加Select
var lines = File
.ReadLines(@"C:/Users/Raw.csv")
.Select(line => line.StartsWith("Walmart,") ? line : $"Walmart,{line}")
.ToList();
foreach (var shw in lines)
Console.WriteLine(shw);
您不能在迭代源 Enumerable 时对其进行修改。 我总是想象枚举器在当前索引中,例如,如果更改将删除所有成员,则索引将不再有意义。 简单的解决方案是迭代其他东西/制作副本。
在这里,您可以尝试迭代变量“vs”而不是行。
var vs = File.ReadAllLines(@"C:/Users/Raw.csv");
var lines = vs.ToList();
foreach (var check in vs)
{
if (!check.Contains("Walmart"))
{
lines.Insert(0, "Walmart");
}
}
foreach (var shw in lines)
{
Console.WriteLine(shw);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.