繁体   English   中英

如何检查并插入值以列出c#

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM