C#의 문자열 보간은 강력합니다. 가독성도 좋고 컴파일 시점에서 해석하기 때문에 오류 확인도 쉬운데요, 한가지 큰 단점이 있습니다.
다음의 경우를 생각해보죠. 다음의 문자열을 생성하고 싶은데 보간된 문자열로 표현할 방법이 없습니다.
nums {
1, 2, 3, 4, 5,
}
| 일반적인 방법
$@"nums {{
{numsText}
}}"; // 여기서 numsText는 "1, 2, 3, 4, 5,"
반복문을 보관된 문자열로 표현할 수 있으면 참 좋을텐데요 다음의 메소드 확장으로 유사하게 사용할 수 있습니다.
public static class StringBuilderExtension
{
public static StringBuilder Foreach<T>(this IEnumerable<T> enumerable, Action<StringBuilder, T> funcCallback)
{
var result = new StringBuilder();
foreach (var item in enumerable)
{
funcCallback?.Invoke(result, item);
}
return result;
}
}
using System.Text;
var nums = new[] { 1, 2, 3, 4, 5 };
var result =
$@"nums {{
{nums.Foreach((s, n) => s.Append(n).Append(", "))}
}}";
Console.WriteLine(result);
| 출력
nums {
1, 2, 3, 4, 5,
}