2010-11-25 19 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

但是,由微软发布的有:

如果其他人,发现这是一个重要的功能,请继续投票 起来。

注意,这只是对多行初始化。