簡體   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