2016-12-09 5 views
0

문자열 목록이 있으므로 그 문자열을 연결하기 위해 노력하고 있습니다.문자열 목록의 문자열 연결

foreach (var item in dir3) 
    { 
      resultDirectionHtml = string.Join(",",item.html_instructions); 
    } 


await EmailSent(resultDirectionHtml); 

현재는 목록의 마지막 요소 만 전송됩니다. 어떻게하면 8 개 정도의 문자열을 연결하여 전송할 수 있습니까?

+1

'='대신'+ ='을 사용해보십시오. 현재 루프 반복마다 모든 문자열을 추가하는 대신 전체 문자열을 재 할당하고 있습니다. – nbokmans

답변

3

= 대신 +=을 사용하십시오. 현재 루프 반복마다 모든 문자열을 추가하는 대신 전체 문자열을 재 할당하고 있습니다.

그래서 코드가됩니다 :

foreach (var item in dir3) 
    { 
      resultDirectionHtml += string.Join(",",item.html_instructions); 
    } 


await EmailSent(resultDirectionHtml); 
+0

효과가있는 것처럼 보입니다. 덕분에 많이 – crystyxn

+0

유일한 문제는, 내가 언급 한 쉼표로 요소를 분리하지 않는다? – crystyxn

+0

무엇을 의미합니까? 출력과 예상 출력을 표시 할 수 있습니까? – nbokmans

5

내가 이런 짓을 할 것이다 : 당신이 끝날 수 있도록

using System.Text; 
var builder = new StringBuilder(); 

foreach (var item in dir3) 
    { 
      builder.Append(item.html_instructions); 
      builder.Append("<br />"); 
    } 

resultDirectionHtml = builder.ToString(); 

당신이 문자열에 "추가"때마다, 그것은 메모리에 새로운 문자열을 생성 당신이 그 목록에있는 많은 항목만큼 많은 문자열을 가지고 있으면서도 계속 메모리를 먹어 버릴 수 있습니다. 루프에서 이러한 코드를 사용하지 않는 것이 좋습니다.

5 개 이상의 항목 StringBuilder를 사용합니다. 아무것도 적지 만, 그만한 가치는 없을 것입니다.

+0

메모리 사용 공간이 적은 좋은 제안입니다. – Nair

2

당신은

resultDirectionHtml += string.Join(",",dir3.Select(i => i.html_instructions)); 
+0

선택의 dir3.SelectMany insted를 의미합니까? – gabba

+1

짧고 달콤한 – Nair

+0

@ gabba - 아니요, 선택을 의미했습니다. 나는 각각의'html_instructions'이 원시적 인 값이었고 또 다른 열거 형 (selectmany가 적절한 곳)이 아니라는 인상을 받았다. Join은 열거 형을 허용합니다 (예 : Console.WriteLine (string.Join (",", Enumerable.Range (0,10)).Hello, Hello 1, Hello 2, Hello 3, Hello 4, Hello 5, Hello 6, Hello 7, Hello 8, Hello 9'를 출력한다. (i => "Hello"+ i) –

1

귀하의 코드가 모든 반복에 resultDirectionHtml의 가치를 재 할당하고, 따라서 당신이 마지막 가치를 투사 대신 foreach 루프를 사용할 수 있습니다. 당신이 LINQ를 사용하여 공상이라면 쉽게 Aggregate 확장의 도움으로 아래와 같이 쓸 수, 다른 메모에서 += 대신 =

foreach (var item in dir3) 
    { 
      resultDirectionHtml += string.Join(",",item.html_instructions); 
    } 

를 사용합니다.

string[] words = { "a", "aa", "aaa" }; 
var output = words.Aggregate((current, next) => current + ", " + next); 
//The value of output will be a, aa, aaa