2010-11-25 15 views
6

¿Es posible habilitar el formato de código fuente C# dentro de los inicializadores de matriz en VS.NET 2010?C# Código fuente Formateo en el inicializador de matriz

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 

Me estoy perdiendo algo de opción de formato en Herramientas-> Opciones-> Texto Editor-> C#?

+0

De su comentario sobre mi respuesta: "El fragmento se toma del inicializador de objetos". - ¿Alguna posibilidad de que puedas agregar más contexto? Lo he intentado con 'var foo = new Foo {Elements = ...}', y es válido C#. Simplemente no se ve desde su fragmento. –

+0

Hasta vs2013 el problema todavía existe para matrices y listas de inicializadores –

Respuesta

2

Parece que esto es una "característica" VS.NET

0

Creo que necesita un constructor predeterminado en su TextViewModel y CheckViewModel.

Por lo que yo sé, esa es la única forma en que .net puede hacerlo. Además, supongo que esos dos objetos heredan de una clase base, y su matriz es del mismo tipo que su clase base.

De lo contrario, los objetos creados serán del tipo "var". El compilador arroja un ajuste porque técnicamente la matriz también debe ser del mismo tipo "var".

Además, el parámetro que pase a los ctors de su objeto debe inicializarse en una propiedad como las propiedades Label y Watermark del objeto TextViewModel, y Style, Default y Label del CheckViewModel, respectivamente.

+1

Esto no tiene nada que ver con los constructores. Es solo un error o una característica de Visual Studio. VS.NET simplemente no formatea los inicializadores de matriz formateados :( –

0

Eso no se ve como C# válido. Falta una declaración de matriz después de Elements =. Debería ser algo así como:

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

Una vez que haya solucionado eso, el formateo podría comenzar a funcionar correctamente. Lo hace por mí (pero estoy usando ReSharper).

+0

Elementos es una propiedad compatible con matrices (Lista ). El fragmento se toma del inicializador de objetos. –

+1

Gotcha. En cuyo caso, la respuesta es probablemente: "No, no te estás perdiendo cualquier opción; Visual Studio no puede formatear esto correctamente. Ya sea que presente un error en Connect (con más contexto) o instale ReSharper, que funciona. " –

+0

Tengo una mala historia con Resharper. Lo intenté varias veces, pero después de su desinstalación VS .NET es como un soplo de aire fresco, rápido y furioso :) –

3

Es un "No fijará" en connect.microsoft.

Pero, como se ha escrito allí por Microsoft:

Si otros, encuentran que esto es una característica importante, por favor seguir votando arriba.

Nota que esto es sólo para multilínea inicializadores.

Cuestiones relacionadas