【问题标题】:Joining strings with Take() and Skip() from same List<string>使用同一 List<string> 中的 Take() 和 Skip() 连接字符串
【发布时间】:2015-04-24 12:50:14
【问题描述】:

我有一个名为 Items 的List&lt;string&gt;,列表中的第一项总是如下所示(已经包含分隔符):

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

如果我跳过列表中的第一项,这将有效。不知道什么会导致双重\\\\

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

【问题讨论】:

    标签: c#


    【解决方案1】:

    我希望是这么简单:

      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);
        }
    }
    

    产生这个输出:

    一\\二\\三\\四

    【讨论】:

    • 由于某种原因,它在第一个之后的任何项目都附加了 \\\\。
    • @user1307149 - 您确定项目本身不以“\”开头或结尾吗?
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      这仅仅是因为调试模式下的\ 表示类似于\\。这就是我的意思(注意第一行@\相当于\\

      解决方案

      所以你可以试试这个(无需跳过第一个):

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

      【讨论】:

        猜你喜欢
        • 2018-03-05
        • 2016-02-23
        • 2010-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多