我有一个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" }.
我如何构建字符串,以便我只使用列表中的Foo
,Bar
和Car
值?
更新
感谢@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());
答案 0 :(得分:2)
如果您需要使用字符串操作,只需使用String.IndexOf和String.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;
}