답변:
간단한 옵션은 다음과 같습니다.
string.Format
:
string x = string.Format("first line{0}second line", Environment.NewLine);
문자열 연결 :
string x = "first line" + Environment.NewLine + "second line";
문자열 보간 (C # 6 이상) :
string x = $"first line{Environment.NewLine}second line";
어디서나 \ n을 사용하고 다음을 대체 할 수 있습니다.
string x = "first line\nsecond line\nthird line".Replace("\n",
Environment.NewLine);
실행시에만 값을 사용할 수 있으므로이 값을 문자열 상수로 만들 수 없습니다 Environment.NewLine
.
Environment.NewLine
싶습니까? 반대로, 그것을 사용하는 것이 좋습니다
Environment.NewLine을 포함하는 const 문자열을 원하면 다음과 같이 할 수 있습니다.
const string stringWithNewLine =
@"first line
second line
third line";
이것은 const 문자열에 있기 때문에 컴파일 타임에 수행되므로 컴파일러는 개행을 해석합니다. 이 동작을 설명하는 참조를 찾을 수 없지만 의도 한대로 작동 함을 증명할 수 있습니다. 나는이 코드를 Windows와 Ubuntu (모노 포함)에서 컴파일 한 다음 분해하고 결과는 다음과 같습니다.
보시다시피, Windows에서 줄 바꿈은 \ r \ n으로, 우분투에서는 \ n으로 해석됩니다.
var sb = new StringBuilder();
sb.Append(first);
sb.AppendLine(); // which is equal to Append(Environment.NewLine);
sb.Append(second);
return sb.ToString();
first + Environment.NewLine + second
더 효율적이고 (IMO) 더 읽기 쉬운 것을 사용 하는 대신 왜 이렇게 하시겠습니까?
String.Format
한 번에 1 개의 문자열을 생성 할 것이라고 생각 했지만 (문화적 연결 등으로 인해 내부적으로 약간 느립니다) 문자열 연결-1 결과 + 1 임시, 맞습니까?
String.Concatenate
출력 문자열 하나만 직접 빌드합니다 (IIRC, 문자열이 리터럴 인 경우 연결은 컴파일러에서 수행됨
"a"+b+"c"+d
등)은 단일 줄과 동일합니까? 아니면 그냥로 변환 String.Concatenate(a,b,c,d,etc)
합니까?
string.Format
의견에서 제안하지 않은 이유 입니다. 컴파일러는을 호출하기 때문에 문자열 연결은 임시 문자열을 생성하지 않습니다 string.Concat(first, Environment.NewLine, second)
.
형식 문자열에서 Environment.NewLine을 편리하게 배치하는 또 다른 방법입니다. 아이디어는 문자열을 평소와 같이 형식화하지만 텍스트의 {nl}을 Environment.NewLine으로 대체하는 문자열 확장 메소드를 작성하는 것입니다.
용법
" X={0} {nl} Y={1}{nl} X+Y={2}".FormatIt(1, 2, 1+2);
gives:
X=1
Y=2
X+Y=3
암호
///<summary>
/// Use "string".FormatIt(...) instead of string.Format("string, ...)
/// Use {nl} in text to insert Environment.NewLine
///</summary>
///<exception cref="ArgumentNullException">If format is null</exception>
[StringFormatMethod("format")]
public static string FormatIt(this string format, params object[] args)
{
if (format == null) throw new ArgumentNullException("format");
return string.Format(format.Replace("{nl}", Environment.NewLine), args);
}
노트
ReSharper에서 매개 변수를 강조 표시하려면 위의 방법에 속성을 추가하십시오.
[StringFormatMethod ( "format")]
이 구현은 단순히 String.Format보다 효율적이지 않습니다.
아마도이 질문에 관심이있는 사람은 다음 질문에도 관심이있을 것 입니다 .C #의 명명 된 문자열 형식
static class MyClass
{
public const string NewLine="\n";
}
string x = "first line" + MyClass.NewLine + "second line"
Environment.NewLine
. 다른 답변을 참조하십시오.
const string
최신 .net 버전에서는 리터럴 앞에 $를 사용하여 다음과 같이 변수를 사용할 수 있습니다.
var x = $"Line 1{Environment.NewLine}Line 2{Environment.NewLine}Line 3";