2010-11-25 4 views
6

Можно ли включить форматирование исходного кода на C# внутри инициализаторов массива в 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#. Это просто не похоже на ваш фрагмент. – 2011-01-08 15:46:58

+0

До vs2013 проблема все еще существует и для массивов и списков инициализаторов – 2015-04-15 12:51:40

ответ

2

Похоже, это VS.NET «особенность»

0

Я считаю, что вам нужен конструктор по умолчанию для вашего TextViewModel и CheckViewModel.

Насколько я знаю, это единственный способ .net может это сделать. Кроме того, я предполагаю, что эти два объекта наследуются от базового класса, а ваш массив - тот же тип, что и ваш базовый класс.

В противном случае создаваемые объекты будут иметь тип «var». Компилятор выбрасывает подгонку, потому что массив будет технически иметь один и тот же тип «var».

Кроме того, параметр, который вы передаете в ctors вашего объекта, должен быть инициализирован в свойстве так же, как свойства Label и Watermark объекта TextViewModel, а также стиль, значение по умолчанию и метка CheckViewModel соответственно.

+1

Это не имеет ничего общего с конструкторами. Это всего лишь ошибка или функция визуальной студии. VS.NET просто не инициализаторы массива интеллектуального формата :( – 2011-01-08 10:22:52

0

Это не похоже на действительный C#. Вам не хватает объявления массива после Elements =. Это должно быть примерно так:

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

Как только вы исправили это, форматирование может начать работать правильно. Это для меня (но я использую ReSharper).

3

Это «не исправит» в connect.microsoft.

Но, как писал там Microsoft:

Если другие считают, что это важная особенность, пожалуйста, продолжайте голосовать его.

Примечание, что это только для многострочно инициализаторов.

Смежные вопросы