2013-01-18 4 views
0

나는이 나는 A가이costum 형식으로 문자열의 목록을 가입

같은 것을 얻을 수있는 방법은 특정 형식으로 모든 elemenet에 가입하려면이

List<String> lstHeaders = new List<string>(new String[]{"str","str1","str2"}); 

같이 정의 문자열 목록

<td>str</td><td>str1</td><td>str2</td> 

하지만, 아마 자신의 extensi를 작성하는 것이 더 의미가 있습니다, 단지 코드의 온라인이

"<th>"+lstHeaders.functionToGetFormated()+"</th>" 
+0

나는 람다 표현에서 생각하고 있었지만 그 결과를 얻는 방법을 모르겠다. –

답변

0

:

var sb = new StringBuilder(); 
lstHeaders.ForEach(x => sb.AppendFormat("<td>{0}</td>", x)); 
return sb.toString() 
+1

솔직히 나는 이것이 LINQ 표현을 너무 멀리 생각하고 있다고 생각합니다 ... – Alan

+0

@Alan, 왜? 그것은 다소 단순한 표현입니다 ... –

+0

나는 그것이 나에게 성장하고있는 것을 몰라 ... – Alan

2

같은 것을이 얻을 on 방법. 내장 된 것은 그와 똑같이 작동하지 않습니다 (나는 알고 있습니다).

public static string WrapElementsWithTag(this IEnumerable<string> input, string wrapper) 
{ 
    StringBuilder sb = new StringBuilder(); 
    foreach (string s in input) 
    { 
     sb.AppendFormat("<{1}>{0}</{1}>", s, wrapper); 
    } 
    return sb.ToString(); 
} 

다음과 같이 호출됩니다. Linq에와 String.Concat를 사용

string.Format("<td>{0}</td>", string.Join("</td><td>", lstHeaders)); 
+0

@ eli.rodriguez 그는 당신이 말한 정확한 방법을 제공함으로써 당신의 질문을 끝까지 따라하려고 시도했다. +1 – scartag

+1

@ eli.rodriguez; 그렇게되면 재사용 할 수없는 솔루션이 생기고 인라인 코드가 많이 생성됩니다. 나는 이것이 유일한 유스 케이스가 아닐 것이라고 생각한다. –

+0

'태그가있는 wrap list elements'기능을보다 재사용 가능한 구현으로 만들기위한 사소한 업데이트입니다. –

2

StringBuilder 클래스를 사용

string result = string.Concat(lstHeaders.Select(s => string.Format("<td>{0}</td>", s))); 

한때와 아마 명확 에일리 구문 :

string result = string.Concat(from s in lstHeaders select string.Format("<td>{0}</td>", s)); 
0

당신이 할 수있는 일 같은 :

lstHeaders.WrapElementsWithTag("td"); 
0

일반적으로 간단한 문자열 연결은 html 및 xml과 같은 메타 데이터를 생성하는 것에 대해 위험합니다. 텍스트가 메타 구문을 손상시키지 않는다고 확신하는 경우 반드시 StringBuilder 또는 LinQ를 사용하십시오. 예, 그 문자열은 이미 탈출했다.

그렇지 않으면 HtmlTextWriter 사용을 고려할 수 있습니다. LINQ에서 HtmlTextWriter를 사용하는 것이 어렵지 않습니다.

관련 문제