C #에서 목록을 문자열로 변환


184

C #에서 목록을 문자열로 어떻게 변환합니까?

toStringList 객체에서 실행 하면 다음과 같은 결과가 나타납니다.

System.Collections.Generic.List`1 [System.String]


1
List는 모음입니다.이 문자열은 어떻게 생겼습니까?
Marko

여기에 언급 된 세 가지 방법 중 하나를 시도 할 수 있습니다 .
RBT

답변:


365

어쩌면 당신은하려고합니다

string combindedString = string.Join( ",", myList.ToArray() );

","를 목록의 요소를 나누려는 항목으로 바꿀 수 있습니다.

편집 : 언급으로 코멘트에 당신은 또한 할 수

string combindedString = string.Join( ",", myList);

참고:

Join<T>(String, IEnumerable<T>) 
Concatenates the members of a collection, using the specified separator between each member.

4
string combindedString = string.Join ( ",", myList.ToArray ());을 의미합니까?
sawe

2
인수 '2': 'System.Collections.Generic.List <string>'에서 'string []'(으)로 변환 할 수 없습니다.
Ash

9
나는 이것을 최근에 사용했는데, 그것은 작동합니다. .ToArray ()를 생략하십시오
Adrian K

3
.Net 4.0이 IEnumerable <string>을 전달하는 기능을 추가했기 때문에 @AdrianK가 맞습니다. 그러나 4.0이 질문하기 전에, 2010 년 4 월 출시 된과 대답은 사람들 여기 그래서 아마 게시 (아래 몇 가지 아래 이외의) 그것의 아직 모르고 있었다
앤드류 Steitz

vb.net의 경우 Dim combindedString As String = String.Join ( ",", myList.ToArray ())
PartTimeNerd

55

나는 내 직감과 함께 가고 ToString목록의 각 요소를 호출 한 결과를 연결하려고한다고 가정 합니다.

var result = string.Join(",", list.ToArray());

16

당신은 사용할 수 있습니다 string.Join:

List<string> list = new List<string>()
{
    "Red",
    "Blue",
    "Green"
};

string output = string.Join(Environment.NewLine, list.ToArray());    
Console.Write(output);

결과는 다음과 같습니다.

Red    
Blue    
Green

에 대한 대안으로 Environment.NewLine, 선택한 문자열 기반 줄 구분자로 바꿀 수 있습니다.


14

간단한 조인보다 약간 더 복잡한 것을 원한다면 LINQ를 사용할 수 있습니다.

var result = myList.Aggregate((total, part) => total + "(" + part.ToLower() + ")");

[ "A", "B", "C"]를 가져 와서 "(a) (b) (c)"를 생성합니다.


1
빈 컬렉션에 대해 InvalidOperationException이 발생하지 않도록하려면 첫 번째 매개 변수로 시드와 함께 집계를 사용하십시오.
Huacanacha

13

String.Join(" ", myList)또는 String.Join(" ", myList.ToArray()). 첫 번째 인수는 하위 문자열 사이의 구분 기호입니다.

var myList = new List<String> { "foo","bar","baz"};
Console.WriteLine(String.Join("-", myList)); // prints "foo-bar-baz"

.NET 버전에 따라 먼저 목록에서 ToArray ()를 사용해야 할 수도 있습니다.


9

당신은 List<string>-그래서 당신이 그들을 연결하려는 경우, 같은

string s = string.Join("", list);

작동합니다 (최소한 .NET 4.0에서). 첫 번째 매개 변수는 분리 문자입니다. 따라서 쉼표로 구분할 수도 있습니다.

또한 목록을 구성하는 대신 StringBuilder를 사용하여 연결을 실행하는 방법을 살펴볼 수도 있습니다.


8

.ToString()참조 유형의 방법은 일반적으로 다시 해결 System.Object.ToString()이 파생 타입을 오버라이드 (override)하지 않는 한 (아마도 내장 타입의 확장 방법을 사용하여). 이 메소드의 기본 동작은 호출 된 유형의 이름을 출력하는 것입니다. 여러분이보고있는 것은 예상되는 행동입니다.

string.Join(", ", myList.ToArray());이것을 달성하기 위해 무언가를 시도 할 수 있습니다. 추가 단계이지만 확장 방법 System.Collections.Generic.List<T>을 사용하여 조금 더 쉽게 만들 수 있습니다. 이 같은:

public static class GenericListExtensions
{
    public static string ToString<T>(this IList<T> list)
    {
        return string.Join(", ", list);
    }
}

(이것은 자유 코드이며 테스트되지 않은 코드입니다. 현재 컴파일러가 유용하지 않으므로 약간 실험 해보십시오.)


ToString이 아닌 호출하거나 일반 매개 변수로 실행하면 작동합니다. 그러나 나는 확장 방법을 사용하는 당신의 아이디어를 좋아한다 :)
IAdapter


2

목록의 항목을 큰 긴 문자열로 바꾸려면 다음과 같이하십시오 String.Join("", myList). 일부 이전 버전의 프레임 워크에서는 IEnumerable을 두 번째 매개 변수로 전달할 수 없으므로 .ToArray ()를 호출하여 목록을 배열로 변환해야 할 수 있습니다.


2

귀하의 질문에 대한 직접적인 대답은 String.Join다른 사람들이 언급 한 것입니다.

그러나 조작이 필요한 경우 다음을 사용할 수 있습니다 Aggregate.

List<string> employees = new List<string>();
employees.Add("e1");
employees.Add("e2");
employees.Add("e3");

string employeesString = "'" + employees.Aggregate((x, y) => x + "','" + y) + "'";
Console.WriteLine(employeesString);
Console.ReadLine();

1
프로덕션 코드에서 목록에 요소가 있는지 확인하십시오. 그렇지 않으면 예외가 발생합니다.
AZ_

1

이 방법은 텍스트 파일에서 데이터를 검색하여 배열에 저장 한 다음 가변 문자열에 할당 할 때 도움이되었습니다.

string[] lines = File.ReadAllLines(Environment.CurrentDirectory + "\\Notes.txt");  
string marRes = string.Join(Environment.NewLine, lines.ToArray());

희망적으로 누군가를 도울 수 있습니다 !!!!


0

이것은 나를 위해 작동하는 것 같습니다.

var combindedString = new string(list.ToArray());

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.