2010-11-25 9 views
6

VS.NET 2010の配列初期化子でC#ソースコードの書式設定を有効にすることはできますか?配列初期化子のソースコード書式設定

Elements = 
{ 
// starting from here source code formatting does not work 
    new TextViewModel("PublicId") 
    { 
    Label = new LText("Fund Nr:", "de", "Fondsnummer"), 
    Watermark = new LText("Please enter fund number...", "de", "Bitte hier Fondsnummer erfassen...") 
    }, 
    new CheckViewModel("Juristic") 
    { 
    Style = "Radio", 
    Default = true, 
    Label = new LText("Juristic Fund", "de", "Juristischer Fonds") 
    } 
}  
// starting from here source code formatting works again 

ツール - >オプション - >テキストエディタ - > C#のいくつかの書式設定オプションがありませんか?

+0

私の答えにあなたのコメントから: "スニペットはオブジェクトイニシャライザから取られます。" - あなたはもっと文脈を付け加えることができますか?私は 'var foo = new Foo {Elements = ...}'で試してみました。これは有効なC#です。それはちょうどあなたのスニペットからそれのように見えません。 –

+0

vs2013まで配列とリストの初期化子にも問題があります –

答えて

2

が見えます。 Microsoftがそこに掲載され

しかし、:他の人は、これは重要な機能であることが判明した場合

、投票 それを保管してください。

これが唯一マルチラインイニシャライザのためであることに留意されたい

0

TextViewModelとCheckViewModelにデフォルトのコンストラクタが必要だと思います。

私が知っている限り、これが唯一の方法です.netがそれを行うことができます。また、私はこれらの2つのオブジェクトが基本クラスから継承していると仮定しており、配列は基本クラスと同じ型です。

これ以外の場合、作成されるオブジェクトのタイプは「var」になります。配列が技術的に同じ型の "var"でなければならないので、コンパイラは適合をスローします。

また、オブジェクトのctorsに渡すパラメータは、TextViewModelオブジェクトのプロパティLabelとWatermark、CheckViewModelのStyle、Default、Labelと同じプロパティで初期化する必要があります。

+1

これはコンストラクタとは関係ありません。これは単なるバグであり、Visual Studioの機能です。 VS.NETは単純ではないスマートな形式の配列初期化子を行い:( –

0

これは有効なC#のようには見えません。 Elements =の後に配列宣言がありません。

Elements = new ViewModelBase[] { /* ... */ }; 

これを修正したら、フォーマットが正しく機能するようになります。それは私のためです(しかし私はReSharperを使っています)。これはVS.NET「機能」

+0

Elementsは、アレイと互換性のプロパティ(一覧)であるスニペットは、オブジェクト初期化子から取られている場合には、答えのはおそらく –

+1

ガッチャ:。。「いいえ、あなたが不足していません。任意のオプション; Visual Studioでこれを正しくフォーマットすることはできません。より多くの文脈で)Connectにバグを報告するか、ReSharperをインストールしてください。 " –

+0

私はResharperで間違った履歴を残しています。 .NETは新鮮な空気の息吹のようです - 速く怒っている:) –