在C#List中从字符串部分创建逗号分隔的字符串

时间:2012-12-20 06:08:22

标签: c#

我有一个C#List,我想创建一个逗号分隔的字符串。我在SO上找到了其他答案,但我的具体情况是我只想使用List中的一部分值来创建字符串。

如果我的列表包含以下值:

“foo” 的 “酒吧” “汽车”

我想创建一个字符串

Foo, Bar and Car.

我可以使用这段代码:

string.Format("{0} and {1}.", 
              string.Join(", ", myList.Take(myList.Count - 1)), 
              myList.Last());

但是,我的列表实际上是由jSON值组成的,如此

{ Name = "Foo" }
{ Name = "Bar" }
{ Name = "Car" }

所以上面的代码导致:

{ Name = "Foo" }, { Name = "Bar" } and { Name = "Car" }.

我如何构建字符串,以便我只使用列表中的FooBarCar值?

更新

感谢@StevePy,这就是我最终的目标:

string.Format("{0} and {1}.", 
              string.Join(", ", myList.Select(x => x.Name).ToList().Take(myList.Count - 1)), 
              myList.Select(x => x.Name).ToList().Last());

5 个答案:

答案 0 :(得分:2)

如果您需要使用字符串操作,只需使用String.IndexOfString.LastIndexOf方法获取每个字符串的必要部分:

List<string> myList = new List<string> { 
    "{ Name = \"Foo\" }",
    "{ Name = \"Bar\" }",
    "{ Name = \"Car\" }"
};

var temp = myList.Select(x =>
    {
        int index = x.IndexOf("\"") + 1;
        return x.Substring(index, x.LastIndexOf("\"") - index);
    })
    .ToList();

string result = string.Format("{0} and {1}.",
                              string.Join(", ", temp.Take(myList.Count - 1)),
                              temp.Last());

答案 1 :(得分:1)

Linq应该帮忙。

var nameList = myList.Select(x=>x.Name).ToList();

答案 2 :(得分:0)

您可以使用JsonConvert.toString获取列表项的值,或者如果您使用了json序列化,则可以使用JsonConvert.Deserialization

答案 3 :(得分:0)

我构建了一个可以为您完成此操作的方法:

static string ConvertToMyStyle(List<string> input)
{
    string result = "";

    foreach(string item in input)
    {
        if(input.IndexOf(item) != input.ToArray().Length-1)
            result += item + ", ";
        else
            result += "and " + item + ".";
    }
    return result;
}

答案 4 :(得分:0)

这处理单项案例

protected string FormatWithOxfordCommas(List<string> reasons)
        {
            string result = "";
            if (reasons.Count == 1)
                result += reasons[0];
            else
            {
                foreach (string item in reasons)
                {
                    if (reasons.IndexOf(item) != reasons.Count - 1)
                        result += item + ", ";
                    else
                        result += "and " + item + ".";
                }
            }
            return result;
        }