从 position 插入多行到文件而不覆盖之前插入的行

Insert multiple lines into file from position without overwriting the previous inserted line

我想使用 foreach 循环(在列表上循环)将多个“项目”插入到列表中。现在我想将这些行作为 <td> 元素插入。但是通过在我想插入行的位置指定索引,前一个被覆盖。如何在 position 添加一行,然后在不覆盖之前添加的行的情况下添加其余行

private void Create_Driver_Report(string npcName)
{

    var fileName = Get_Path("Driver_Reports.html");
    var endTag = npcName;
    var lineToAdd = "<!--New Line Here-->";
    var htmlContent = File.ReadAllLines(fileName).ToList();
    var index = htmlContent.FindIndex(x => x.Contains(lineToAdd));
           
    htmlContent.Insert(index + 1, endTag);          
    File.WriteAllLines("drivers.html", htmlContent);
}

理论上我想怎么做

foreach (Drivers item in drivers)
{
    Create_Driver_Report($"<td>{item.Driver_ID}</td>");
    Create_Driver_Report($"<td>{item.Driver_Name}</td>");
    Create_Driver_Report($"<td>{item.Vehicle_ID}</td>");
    Create_Driver_Report($"<td>{item.Company_ID}</td>");
    Create_Driver_Report($"<td>{item.Company_Name}</td>");                
}           

重写 ToString() 方法或创建一个新方法。 如果你总是想插入相同的属性,似乎没有必要一遍又一遍地调用 Create_Driver_Report

public override String ToString() {
        return
            $"<td>{this.Driver_ID}</td>\n" +
            $"<td>{this.Driver_Name}</td>\n" +
            $"<td>{this.Vehichle_ID}</td>\n" +
            $"<td>{this.Company_ID}</td>\n" +
            $"<td>{this.Company_Name}</td>";
    }

您可以像这样调用它:

foreach (Drivers item in drivers) {
    Create_Driver_Report(item.ToString());
}

编辑: 选项 1:
使用 LINQ Select() 和 List.InsertRange()

public String ToHtmlRow() {
    return
        $"<tr><td>{this.Driver_ID}</td><td>{this.Driver_Name}</td><td>{this.Vehichle_ID}</td><td>{this.Company_ID}</td><td>{this.Company_Name}</td></tr>";
}

{
  IEnumerable<string> lines = drivers.Select(driver => driver.ToString())
  Create_Driver_Report(lines);
}

static void Create_Driver_Report(IEnumerable<string> lines) {
    var fileName = Get_Path("Driver_Reports.html");
    var lineToAdd = "<!--New Line Here-->";
    var htmlContent = File.ReadAllLines(fileName).ToList();
    var index = htmlContent.FindIndex(x => x.Contains(lineToAdd));
    
    htmlContent.InsertRange(index + 1, lines);
    File.WriteAllLines("drivers.html", htmlContent);
}

选项 2: 您只需添加所需的所有行,然后只调用一次 Create_Driver_Report

List<String> toAdd = new List<String>();
foreach (Drivers item in drivers) {
    toAdded.Add(item.ToHtmlRow());
}

Create_Driver_Report(String.Join("\n", toAdd));