2011-08-24 16 views
17

特に、複数行のテキストが多い場合は、C#で@ "文字列"を使用するのが大好きです。奇妙なのは、私のコードフォーマットが、これを行うときにdoodieに向かうということです。なぜなら、2番目以降の行は、美しくフォーマットされたコードのインデントを使用する代わりに、完全に左にプッシュされるからです。私はこれが仕様であることを知っていますが、出力に実際のタブ/スペースを追加することなく、これらの行を字下げするオプション/ハック方法がありますか?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

キャッチは - いくつかの状況で先行する空白が欲しいかもしれないので、テキストが左の余白に当たるように空白を取り除きたいだけです...意味がありますか? –

4

シメンは適切な解決策を提供しています。私はScalaの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