2011-12-15 13 views
7

Quiero una cadena C# 4 constante para representar una nueva línea y una pestaña como en el siguiente:¿Constante de cadena para una nueva línea + pestaña?

internal const string segment = "\r\n\t"; 

Sé que hay Environment.NewLine que supongo que podría utilizar la siguiente manera:

internal const string segment = Environment.NewLine + "\t"; 

Mi pregunta es ¿cuál es la forma más eficiente de construir una constante de cadena que tiene una nueva línea y una pestaña?

+2

El segundo es mejor ya que es independiente de la plataforma –

+0

¿Eficiente de esa manera? ¿Legibilidad? Velocidad pura? La portabilidad del sistema operativo? "\ r \ n \ t" probablemente le dará un rendimiento marginalmente mejor, pero puede no ser adecuado para todos los entornos, incluidos navegadores, Windows/Unix, etc.) –

+0

@orn: por el contrario, el valor del segundo * depende absolutamente * en la plataforma. –

Respuesta

13

Siempre que se declara la cadena como const, como el anterior, no hay absolutamente ninguna diferencia en términos de eficiencia. Cualquier constante se sustituirá en tiempo de compilación y utilizará una cadena interna.

Desafortunadamente, la segunda opción no es una constante de tiempo de compilación y no se compilará. Con el fin de usarlo, lo que se necesita para declarar como:

internal static readonly string segment = Environment.NewLine + "\t"; 

Yo, personalmente, encuentro esto muy claro en cuanto a la intención, y que sería mi preferencia, a pesar de que no va a ser una tiempo de compilación constante. La sobrecarga adicional/pérdida de eficiencia es tan increíblemente pequeña que yo personalmente elegiría el intento claro y el código legible sobre la constante de tiempo de compilación.

Tenga en cuenta que usar Environment.NewLine también tiene la ventaja de ser correcto si transfiere este código a Mono, y su objetivo es utilizar el separador de línea de plataforma actual. El primero será incorrecto en plataformas que no sean de Windows en ese caso específico. Si su objetivo es incluir específicamente "\r\n\t", y no desea el separador de línea específico de la plataforma, entonces Environment.NewLine sería una elección inapropiada.

+0

+1 para observar las diferencias de la plataforma. – vcsjones

+2

"Correcto" depende de cómo el OP planea usarlo. Si el objetivo es representar "retorno de carro, salto de línea, pestaña", entonces la primera forma es correcta y la segunda no. Si el objetivo es representar "el separador de línea para la plataforma actual seguido de una pestaña", entonces la segunda forma es correcta. Ninguno de los dos es universalmente lo correcto. –

+0

@JonSkeet Sí, suponía que el deseo de OP de utilizar Environment.NewLine sugería que OP deseaba un separador de líneas. –

5

const no funcionará. use static readonly.

internal static readonly string segment = Environment.NewLine + "\t"; 
+0

Las constantes deben ser cadenas constantes "Esto es un Const" – MethodMan

+0

@DJKRAZE - ¿Pueden dar más detalles? Esta es una forma aceptable de crear un valor constante. –

+0

segmento interno de cadena estática = Environment.NewLine + "\ t"; funcionará o lo convertirá en una cadena estática privada. – MethodMan

1

la eficiencia de velocidad pura entonces la primera va a ganar, sobre todo porque el segundo no se puede hacer const y luego no puede ser compilado en.

Aún así, la segunda va a ser muy rápido de hecho maldito, por lo No me importaría

Mucho más importante es que estos simplemente no son lo mismo.

Todo se reduce a "¿por qué estás usando \ r \ n \ t"?

Si está utilizando \ r \ n \ t porque estás en Windows y en nuevas líneas de Windows normalmente \ r \ n, entonces definitivamente debe utilizar:

internal static readonly string segment = Environment.NewLine + "\t"; 

Con la otra sería mal, y podría introducir errores que no verá en los próximos años.

Si está utilizando \ r \ n porque se trabaja con una especificación que dice "segmentos separados con un CRLF seguido de una pestaña", entonces definitivamente deberían utilizar:

internal const string segment = "\r\n\t"; 

Utilizando el otro estaría mal.

Esto es algo que muerde a la gente de verdad.Las personas de Windows escriben código HTTP que simplemente usa una línea nueva de Windows entre los encabezados dos entre los encabezados y el cuerpo. Luego se traslada a un lugar donde la nueva línea está \ n y se rompe porque HTTP manda \ r \ n independientemente del sistema utilizado. Lo mismo aplica al revés.

(Según el principio estricto/permisivo, también puede ser una buena idea suponer que otro código continuará obteniendo este error, y aceptar todos los diversos formularios de nueva línea).

Cuestiones relacionadas