2011-08-24 3 views
17

특히 여러 줄 텍스트가 많은 경우 C#에서 @ "문자열"을 사용하는 것을 좋아합니다. 유일한 문제는 내 코드 형식이 두 번째 및 큰 줄을 완전히 아름답게 형식화 된 코드의 들여 쓰기 대신 완전히 왼쪽으로 밀어 내기 때문에 이렇게 할 때 doodie로 이동한다는 것입니다. 이 디자인에 의해 알고 있지만 출력/실제 탭을 추가하지 않고 이러한 줄 들여 쓰기 수 있도록 몇 가지 옵션/해킹 방법은 무엇입니까?C# (접두사 @) 접두사 문자열에 대한 여러 줄의 서식 지정

추가 예 :

 var MyString = @" this is 
a multi-line string 
in c#."; 

내 변수 선언은 "정확한"깊이 들여되지만 문자열에서 두번째 이후 라인 왼쪽 margin- 때문에 코드 얻을수 다소 깬다. 2 번과 3 번줄의 시작 부분에 탭을 추가 할 수는 있지만 문자열 자체에 해당 탭이 포함됩니다.

+0

당신이 예를 제공 할 수 있습니다!? – gideon

+1

내가 일반적으로하는 일은 문자열을 자체 행 (즉,'@ '앞에 줄 바꿈)으로 시작하는 것입니다. 따라서 적어도 오른쪽에서 갑자기 왼쪽에 있지 않습니다. 네가 한 해결책이 아니라는 걸 안다. –

+0

예 나는 종종 그렇게합니다. 그리고 정말로 큰 문제는 아니지만, 이것이 흥미로운 질문이 될 것이라고 생각했습니다. –

답변

9

문자열 확장은 어떨까요? 업데이트 : 귀하의 질문을 다시 읽고 더 나은 대답이되기를 바랍니다. 이것은 나 또한 버그가 나를 해결할 필요가있는 것인데, 아래와 같이 실망 스럽지만 더 좋은면에서는 효과가있다.

using System.Text.RegularExpressions; 

namespace ConsoleApplication1 
{ 
    public static class StringExtensions 
    { 
     public static string StripLeadingWhitespace(this string s) 
     { 
      Regex r = new Regex(@"^\s+", RegexOptions.Multiline); 
      return r.Replace(s, string.Empty); 
     } 
    } 
} 

그리고 예를 들어 콘솔 프로그램 :

using System; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string x = @"This is a test 
       of the emergency 
       broadcasting system."; 

      Console.WriteLine(x); 

      Console.WriteLine(); 
      Console.WriteLine("---"); 
      Console.WriteLine(); 

      Console.WriteLine(x.StripLeadingWhitespace()); 

      Console.ReadKey(); 
     } 
    } 
} 

그리고 출력 :

This is a test 
       of the emergency 
       broadcasting system. 

--- 

This is a test 
of the emergency 
broadcasting system. 

그리고 당신은이 경로가는 것을 결정하는 경우에 사용하는 청소기 방법 :

string x = @"This is a test 
    of the emergency 
    broadcasting system.".StripLeadingWhitespace(); 
// consider renaming extension to say TrimIndent() or similar if used this way 
+0

예, 제가 생각하고 있던 해결책입니다. 일부 줄에 공백/탭을 넣을 수 있기 때문에 특정 수의 공백이나 탭만 제거하는 인텔리전스를 추가해야 할 수도 있습니다.) –

+0

문자열이 공백으로 시작하고 기본값으로'^ \ s + 그렇다면 공백의 양은? – Cymen

2

나는 당신의 질문을 완전히 만족시킬 수있는 대답을 생각할 수 없다. 그러나 문자열에 포함 된 텍스트 행의 선행 공백을 제거하고 그러한 문자열을 작성할 때마다 호출하는 함수를 작성할 수있다.

var myString = TrimLeadingSpacesOfLines(@" this is a 
    a multi-line string 
    in c#."); 

예 예를 들어 해킹입니다. 질문에 해킹을 수락했습니다.

+0

catch가 - 특정 상황에서 일부 선행 공백이 필요할 수 있으므로 텍스트가 왼쪽 여백에 맞도록 빈 공간을 제거하기 만하면됩니다. –

4

시멘이 올바른 해결책을 제시했습니다. 스칼라의 stripMargin() 메소드에서 파생 된 비슷한 접근법을 사용한다. 여기 내 확장 메서드의 모습입니다 :

public static string StripMargin(this string s) 
{ 
    return Regex.Replace(s, @"[ \t]+\|", string.Empty); 
} 

사용법 :

var mystring = @" 
     |SELECT 
     | * 
     |FROM 
     | SomeTable 
     |WHERE 
     | SomeColumn IS NOT NULL" 
    .StripMargin(); 

결과 :

SELECT 
    * 
FROM 
    SomeTable 
WHERE 
    SomeColumn IS NOT NULL