¿Por qué .NET agrega una barra adicional a las barras ya existentes en una ruta?

Me he dado cuenta de que C # agrega barras diagonales adicionales ( \ ) a las rutas. Considere la ruta C:\Test . Cuando inspecciono la cadena con esta ruta en el visualizador de texto, la cadena real es C:\\Test .

¿Por qué es esto? Me confunde, ya que a veces puedo dividir la ruta (usando string.Split() ), pero tengo que preguntarme qué cadena usar (una o dos barras).

.Net no está agregando nada a su cadena aquí. Lo que ves es un efecto de cómo el depurador elige mostrar las cadenas. Las cadenas de C # se pueden representar en 2 formas

  • Cadenas Verbatim: Prefijado con un signo @ y elimina la necesidad de escapar \\ caracteres
  • Cadenas normales: cadenas de estilo estándar C donde los caracteres \\ necesitan escapar

El depurador mostrará un literal de cadena como una cadena normal frente a una cadena literal. Sin embargo, es solo una cuestión de visualización, no afecta su valor subyacente.

El \\ se usa porque el \ es un carácter de escape y es necesario representar el un único \ .

Por lo tanto, se trata de tratar el primero como un carácter de escape y luego el segundo se toma como el valor real. Si no, el siguiente carácter después del primero \ se analizará como un carácter escapado.

Aquí hay una lista de caracteres de escape disponibles:

 \' - single quote, needed for character literals \" - double quote, needed for string literals \\ - backslash \0 – Null \a - Alert \b - Backspace \f - Form feed \n - New line \r - Carriage return \t - Horizontal tab \v - Vertical quote \u - Unicode escape sequence for character \U - Unicode escape sequence for surrogate pairs. \x - Unicode escape sequence similar to "\u" except with variable length. 

EDITAR: para responder a su pregunta sobre Split , no debería haber ningún problema. Usa Split como lo harías normalmente. El \\ se tratará como el único carácter de \ .

Los visualizadores del depurador muestran cadenas en la forma en que aparecerían en el código C #. Como \ se usa para escapar de caracteres en cadenas C # no verbatum, \\ es la forma correcta de escape.

De acuerdo, entonces las respuestas anteriores no son del todo correctas. Como tal, estoy agregando mis hallazgos a la siguiente persona que lea esta publicación.

No puede dividir una cadena utilizando ninguno de los caracteres de la tabla anterior si está leyendo dichas cadenas de una fuente externa.

es decir,

 string[] splitStrings = File.ReadAllText([path]).Split((char)7); 

no se dividirá por esos caracteres. Sin embargo, las cadenas creadas internamente funcionan bien.

es decir,

 string[] splitStrings = "hello\agoodbye".Split((char)7); 

Esto puede no ser cierto para otros métodos de lectura de texto de un archivo. No estoy seguro ya que no he probado con otros métodos. Con eso en mente, ¡probablemente sea mejor no usar esos caracteres para delimitar cadenas!