使用相同List <string>的Take()和Skip()连接字符串

时间:2015-04-24 03:00:53

标签: c#

我有List<string>名为项目,列表中的第一项始终如下(已包含分隔符):

string1\\string1

然后其余项目将是没有separator (\\)的普通字符串。

我正在尝试string.Join所有这些并获得如下所示的字符串表示。

somestring1\\somestring1\\somestring2\\somestring3

我正在尝试这样的事情,但它没有正确绑定。加入这些的正确方法是什么?:

string path = string.Join(@"", Items.Take(1), string.Join(@"\\", Items.Skip(1)));

更新:

var items = new List<string>();
items.AddRange(HeaderCollection.Select(item => item.Header));
var path = string.Join(@"\\", items.ToArray());

正在制作

somestring1\\somestring1\\\\somestring2

enter image description here

enter image description here

如果我跳过列表中的第一项,则此方法有效。不知道什么会导致双\\\\

var header = string.Join(@"\\", items.Skip(1));

3 个答案:

答案 0 :(得分:5)

我希望如此简单:

  string path = string.Join(@"\\", Items.ToArray());

例如,这个程序:

using System;
using System.Collections.Generic;

public class Program
{
    public static void Main()
    {
        List<String> list = new List<String>();
        list.Add(@"One\\Two");
        list.Add(@"Three");
        list.Add(@"Four");

        String s = String.Join(@"\\", list.ToArray());

        Console.WriteLine(s);
    }
}

生成此输出:

  

一\\两个\\三\\四

答案 1 :(得分:1)

我不确定我是否理解。这就是你需要的吗?

string s = list.Aggragate((a, b) => a + "//" + b);
s = list.First() + "//" + s;

答案 2 :(得分:1)

这只是因为调试模式中的\表示与此\\类似。这就是我的意思(注意第一行@\等同于\\

enter image description here

<强>解决方案

所以你可以尝试这个(不需要跳过第一个):

var path = string.Join(@"\", items.ToArray());  // @"\" not @"\\"