2010-04-13 30 views
7

Tratando de anular un tostring en una de mis clases.nueva línea en una cadena de varias líneas

return string.Format(@" name = {0} 
         ID = {1} 
         sec nr = {2} 
         acc nr = {3}", string, int, int ,int); // types 

Pero la cuestión es que el resultado no está alineado cuando se imprime:

name = test 
            ID = 42 
            sec nr = 11 
            acc nr = 55 

Tratar de añadir \ n sólo imprime a cabo sin formatear. Supongo que tiene algo que ver con @ "" que estoy usando para el revestimiento múltiple.

gustaría que imprima:

name = test 
ID = 42 
sec nr = 11 
acc nr = 55 

Respuesta

14

Si agrega espacios delante, se imprimirá esa manera.

Normalmente lo hago así.

return string.Format(
@" name = {0} 
ID = {1} 
sec nr = {2} 
acc nr = {3}", string, int, int ,int); // types 

Actualización: Tal vez una alternativa más bonita:

string[] lines = 
{ 
    " name = {0}", 
    " ID = {1}", 
    " sec nr = {2}", 
    " acc nr = {3}" 
}; 

return string.Format(
     string.Join(Environment.Newline, lines), 
     arg0, arg1, arg2, arg3); 
+2

que funciona, por lo que es una solución, pero el código es tan feo sin sangría. ¿Se puede hacer esto de alguna manera "mejor"? – Milan

+1

@Zka: No realmente, eso es más o menos lo mejor que se puede obtener :( – leppie

+1

Gracias por la alternativa, se ve mejor y es bastante manejable para mis propósitos. – Milan

5

El @ antes de la cadena se desconecta el formato estándar de cadena de C#, tratan

return string.Format(" name = {0}\n ID = {1} \n sec nr = {2} \n acc nr = {3}", 
         string, int, int ,int); // types 

no puede utilizar el @y use \ n, \ t etc.

EDITAR

Esto es - en mi humilde opinión - tan bueno como se pone

return string.Format("name = {0}\n" + 
         "ID = {1}\n" + 
         "sec nr = {2}\n" + 
         "acc nr = {3}", 
         string, int, int ,int); 
+2

\ n no es muy amigable para Windows ... – leppie

+0

En realidad sí, eso funciona, pero realmente necesito que sea multilínea ya que hay más información para agregar por lo que es una línea muy larga – Milan

+0

@leppie: Perdón, ¿por qué no Windows Friendly? –

0

No, es todos los espacios que tiene en allí.

+0

+1 neutralizado. ¿Qué pasa con esta respuesta? Es más que una sin embargo, la razón más que una solución lo admito. – Amsakanna

+0

Sí, debería haber puesto un poco más de esfuerzo en esta respuesta. Mea culpa. – ben

4

Una solución de MSDN:

// Sample for the Environment.NewLine property 
using System; 

class Sample 
{ 
    public static void Main() 
    { 
    Console.WriteLine(); 
    Console.WriteLine("NewLine: {0} first line{0} second line{0} third line", 
          Environment.NewLine); 
    } 
} 
/* 
This example produces the following results: 

NewLine: 
    first line 
    second line 
    third line 
*/ 
+0

Interesante, nunca hubiera pensado en eso –

1
String.Join(Environment.NewLine, value.Select(i => i) 

donde los valores es colección de cadenas

Cuestiones relacionadas