[C#] 문자열 리터럴에 개행을 삽입하는 방법은 무엇입니까?

.NET에서 둘 다 \r또는 \n문자열 리터럴을 제공 할 수 있지만 Environment.NewLine정적 속성 과 같은 “새 줄”특수 문자를 삽입하는 방법이 있습니까?



답변

간단한 옵션은 다음과 같습니다.

  • 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을 포함하는 const 문자열을 원하면 다음과 같이 할 수 있습니다.

const string stringWithNewLine =
@"first line
second line
third line";

편집하다

이것은 const 문자열에 있기 때문에 컴파일 타임에 수행되므로 컴파일러는 개행을 해석합니다. 이 동작을 설명하는 참조를 찾을 수 없지만 의도 한대로 작동 함을 증명할 수 있습니다. 나는이 코드를 Windows와 Ubuntu (모노 포함)에서 컴파일 한 다음 분해하고 결과는 다음과 같습니다.

Windows에서 분해
우분투에서 분해

보시다시피, 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();


답변

형식 문자열에서 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);
    }

노트

  1. ReSharper에서 매개 변수를 강조 표시하려면 위의 방법에 속성을 추가하십시오.

    [StringFormatMethod ( “format”)]

  2. 이 구현은 단순히 String.Format보다 효율적이지 않습니다.

  3. 아마도이 질문에 관심이있는 사람은 다음 질문에도 관심이있을 것
    입니다 .C #의 명명 된 문자열 형식


답변

string myText =
    @"<div class=""firstLine""></div>
      <div class=""secondLine""></div>
      <div class=""thirdLine""></div>";

그것은 아닙니다 :

string myText =
@"<div class=\"firstLine\"></div>
  <div class=\"secondLine\"></div>
  <div class=\"thirdLine\"></div>";


답변

static class MyClass
{
   public const string NewLine="\n";
}

string x = "first line" + MyClass.NewLine + "second line"


답변

최신 .net 버전에서는 리터럴 앞에 $를 사용하여 다음과 같이 변수를 사용할 수 있습니다.

var x = $"Line 1{Environment.NewLine}Line 2{Environment.NewLine}Line 3";