1

我有一个 C# 列表,我想创建一个逗号分隔的字符串。我在 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" }.

我将如何构造字符串以便只使用列表中的Foo,BarCar值?

更新

感谢@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());
4

5 回答 5

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());
于 2012-12-20T06:21:24.503 回答
1

Linq 应该有帮助。

var nameList = myList.Select(x=>x.Name).ToList();
于 2012-12-20T06:12:05.830 回答
0

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

于 2012-12-20T06:14:58.220 回答
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;
}
于 2012-12-20T08:36:35.750 回答
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;
        }
于 2017-08-22T21:02:42.440 回答