답변:
List<int> list = ...;
string.Join(",", list.Select(n => n.ToString()).ToArray())
간단한 해결책은
List<int> list = new List<int>() {1,2,3};
string.Join<int>(",", list)
방금 코드에서 사용하여 재미있게 작동했습니다.
List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(String.Join(",", list.Select(i => i.ToString()).ToArray()));
이 문제의 약간 더 복잡한 버전에 대한 약 한 무량의 솔루션 (대부분이 느리거나 버그가 있거나 컴파일도하지 않음)에 대해서는이 주제에 대한 내 기사의 주석을 참조하십시오.
http://blogs.msdn.com/ericlippert/archive/2009/04/15/comma-quibbling.aspx
및 StackOverflow 설명 :
추가 멋짐을 위해 IEnumerable <T>의 확장 메서드로 만들어 모든 IEnumerable에서 작동합니다.
public static class IEnumerableExtensions {
public static string BuildString<T>(this IEnumerable<T> self, string delim = ",") {
return string.Join(delim, self)
}
}
다음과 같이 사용하십시오.
List<int> list = new List<int> { 1, 2, 3 };
Console.WriteLine(list.BuildString(", "));
return string.Join(delim, self);
상당히 빠른 것 같습니다.
IList<int> listItem = Enumerable.Range(0, 100000).ToList();
var result = listItem.Aggregate<int, StringBuilder, string>(new StringBuilder(), (strBuild, intVal) => { strBuild.Append(intVal); strBuild.Append(","); return strBuild; }, (strBuild) => strBuild.ToString(0, strBuild.Length - 1));
내 "영리한"항목 :
List<int> list = new List<int> { 1, 2, 3 };
StringBuilder sb = new StringBuilder();
var y = list.Skip(1).Aggregate(sb.Append(x.ToString()),
(sb1, x) => sb1.AppendFormat(",{0}",x));
// A lot of mess to remove initial comma
Console.WriteLine(y.ToString().Substring(1,y.Length - 1));
조건부로 쉼표를 추가하는 방법을 찾지 못했습니다.
Select
람다에 부작용으로 쓰지 마십시오 . 이 경우에도 사용하지 않는 y
그래서 당신이 Select
단지는 본질적으로 foreach
그렇게 등을 쓰기 -.
Select
같은 것은 foreach
"재미"를지나, 음, "학대"로 들어갑니다. 여기서 더 흥미로운 접근 방식은 Enumerable.Aggregate
with StringBuilder
를 시드 값으로 사용 하는 것 입니다. 시도해보십시오.