C#使用String.Format以网格格式将数据写入txt

C# Using String.Format to write data to txt in in a grid format

目前我正在尝试使用 String.Format 创建数据网格(也许网格不是正确的词,稍后会显示),现在正常情况下会很好,除了其中一个行可能有任意数量的行。

目前代码大致如下:

var TextFormat = "{0,-30} {1,-5} {2,-5} {3,-5} {4,-20}";
Text += String.Format(TextFormat, "Name", "ID", "Rarity", "Attributes", "Tier");
for(int i = 0; i < Items.Count; i++)
{
    var Name = Items[i].Name;
    var ID = Items[i].Id;
    var Rarity = Items[i].Rarity;
    var Attributes = Items[i].Attributes.ToList();
    var Tier = Items[i].Tier;
    Text += String.Format(TextFormat, Name, ID, Rarity, Attributes[0], Tier);
}

基本上 Attributes[0] 只是为了显示目的而硬编码,以确保格式在间距方面很好,但最终我希望 Attributes 打印多行,所以输出会像这样:

Name      ID     Rarity    Attributes    Tier
Sword     0      Common    Damage +2     0
                           Accuracy +1

Shield    1      Common    Defense +5    0
                           Weight +5

我希望使用 String.Format 来简化间距,而不必在每个间距之间留出统一数量的空格,但我很难找到 String.Format 的用法与我正在寻找的相似。

如果不可能,那也没关系,我只是希望有一个很好的解决方案,只是我没有看到。

也许这样的事情可以实现您的目标?只需添加一个循环来遍历其余属性。在 i=1 开始循环将跳过您已经输出的第一个条目。

此外,您应该考虑上面@DiskJunky 添加的 StringBuilder 评论。

var TextFormat = "{0,-30} {1,-5} {2,-5} {3,-5} {4,-20}";
Text += String.Format(TextFormat, "Name", "ID", "Rarity", "Attributes", "Tier");
for(int i = 0; i < Items.Count; i++)
{
    var Name = Items[i].Name;
    var ID = Items[i].Id;
    var Rarity = Items[i].Rarity;
    var Attributes = Items[i].Attributes.ToList();
    var Tier = Items[i].Tier;
    Text += String.Format(TextFormat, Name, ID, Rarity, Attributes[0], Tier);
    for(int i=1; i<Attributes.Count; i++){
        Text += String.Format(TextFormat, "", "", "", Attributes[i], "");
    }
}