2010-11-25 45 views
6

是否可以在VS.NET 2010中的數組初始值設定項中啓用C#源代碼格式化?數組初始值設定項中的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#。它只是看起來不像你的片段。 – 2011-01-08 15:46:58

+0

直到vs2013,對於數組和列表初始化程序,問題仍然存在 – 2015-04-15 12:51:40

回答

2

看起來這是一個VS.NET的「功能」

0

我相信你需要TextViewModel和CheckViewModel的默認構造函數。

據我所知,這是唯一的方式。NET可以做到這一點。另外,我假定這兩個對象從基類繼承,並且您的數組與您的基類是相同的類型。

否則,創建的對象將是「var」類型。編譯器會拋出一個合適的結果,因爲數組在技術上必須是「var」類型。

另外,傳遞給對象ctors的參數應該在屬性中初始化,就像TextViewModel對象的屬性Label和Watermark以及CheckViewModel的Style,Default和Label分別一樣。

+1

這與構造函數無關。這只是視覺工作室的一個缺陷或功能。 VS.NET根本就沒有智能格式的數組初始值設定項:( – 2011-01-08 10:22:52

0

這看起來不像是有效的C#。您在Elements =之後缺少數組聲明。它應該是這樣的:

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

一旦你修好了,格式化可能會開始正常工作。它適合我(但我使用ReSharper)。

3

這是一個「不會解決」在connect.microsoft

但是,由微軟發佈的有:

如果其他人,發現這是一個重要的功能,請繼續投票 起來。

注意,這只是對多行初始化。