连接每个循环中的字符串

Doc*_*ord 3 c# linq

我为每个循环使用两个来将值连接到一个变量,所以我可以在查找/替换方法中将值写入Word.我的问题是以下语法会将值写入控制台两次,以便将其写入控制台

Shirt - SH11
Hat - HA22
Socks - SO33
Shirt - SH11
Hat - HA22
Shirt - SH11
Run Code Online (Sandbox Code Playgroud)

我希望写入控制台的价值只是如下所示:

Shirt - SH11
Hat - HA22
Socks - SH11
Run Code Online (Sandbox Code Playgroud)

这是我的语法:

DataTable table = new DataTable();
table.Columns.Add("Name", typeof(string));
table.Columns.Add("ItemsSold", typeof(string));
table.Columns.Add("ItemIDs", typeof(string));
table.Rows.Add("James Jo", "Shirt; Hat; Socks;", "SH11; HA22; SO33");

var itemsSold = table.Rows[0].Field<string>("ItemsSold").Split(new string[] {"; "}, StringSplitOptions.RemoveEmptyEntries);
var ItemIDs = table.Rows[0].Field<string>("ItemIDs").Split(new string[] {"; "}, StringSplitOptions.RemoveEmptyEntries);

string displayformat = "";

foreach (string is in itemsSold)
{
    foreach (string id in ItemIDs)
    {
        string s = is.Replace(";", "");
        string d = id.Replace(";", "");
        displayformat += s + " - " + d + Environment.NewLine;
    }
}

Console.WriteLine(displayformat);
Run Code Online (Sandbox Code Playgroud)

Anu*_*wan 7

如果你真的想在循环中执行此操作,则需要将其修改为

for(int i=0;i<itemsSold.Count();i++)
{
    string s = itemsSold[i].Replace(";", "");
    string d = ItemIDs[i].Replace(";", "");
    displayformat += s + " - " + d + Environment.NewLine;
}
Run Code Online (Sandbox Code Playgroud)

但请注意,使用Zip方法可以轻松完成此操作.而不是整个循环,你可以写

displayformat = string.Join(Environment.NewLine,
                     itemsSold.Zip(ItemIDs, 
                     (items, ids) => $"{items} - {ids}").Replace(";",string.Empty));
Console.WriteLine(displayformat);
Run Code Online (Sandbox Code Playgroud)

你可以在这里阅读Enumerable.Zip