2008-09-23 15 views
5

Tengo una clase auxiliar que tira de una cadena de un archivo XML. Esa cadena es una ruta de archivo (por lo que tiene barras invertidas en ella). Necesito usar esa cadena tal como es ... ¿Cómo puedo usarla como lo haría con el comando literal?Usando el literal '@' con una variable de cadena

lugar de esto:

string filePath = @"C:\somepath\file.txt"; 

quiero hacer esto:

string filePath = @helper.getFilePath(); //getFilePath returns a string 

Esto no es como en realidad estoy usando desde hace; es solo para aclarar un poco lo que quiero decir. ¿Hay algún tipo de .ToLiteral() o algo así?

Respuesta

13

No creo que tenga que preocuparse si ya tiene el valor. El operador @ es para cuando se especifica la cadena (como en el primer fragmento de código).

¿Qué intenta hacer con la cadena de ruta que no funciona?

+1

wow ... demasiado tiempo en la computadora hoy ... la ruta del archivo xml fue simplemente incorrecta. No hay absolutamente ninguna razón por la que tendría que hacer lo que estaba tratando de hacer, gracias por aclararme ... ¡Tengo que irme a la cama! – naspinski

+0

Sí, el @ solo escapa de valores que legalmente no puede escribir en una constante de cadena. No necesitan escaparse cuando ya están en una variable, ya que no tienes dos caracteres para \ n en tu cadena tienes una nueva línea de caracteres. –

3

No estoy seguro si entiendo. En su ejemplo: si helper.getFilePath() devuelve "c: \ somepath \ file.txt", no habrá ningún problema, ya que el @ solo es necesario si especifica explícitamente una cadena con "". Cuando las Funciones "hablan entre sí", siempre obtendrás el camino literal. Si el XML contiene c: \ somepath \ file.txt y su función devuelve c: \ somepath \ file.txt, el string filePath también contendrá "c: \ somepath \ file.txt" como una ruta válida.

2

En C#, el símbolo @ combinado con comillas dobles le permite escribir cadenas escapadas. P.ej.

print(@"c:\mydir\dont\have\to\escape\backslashes\etc"); 

Si no lo usa, debe usar el carácter de escape en las cuerdas.

http://msdn.microsoft.com/en-us/library/aa691090(VS.71).aspx

usted no necesita especificar en ningún otro lugar en el código. De hecho, hacerlo debería causar un error de compilación.

1

Lo tienes al revés. El @ -operator es para convertir literales en cadenas, manteniendo todos los caracteres funky. Tu camino ya es una cadena, no necesitas hacer nada en absoluto. Solo pierde el @.

string filePath = helper.getFilePath(); 
1

la cadena devuelta de su clase de ayuda no es una cadena literal de modo que no es necesario utilizar el carácter '@' para eliminar el comportamiento de las barras invertidas.

1

El @ "" simplemente hace que sea más fácil escribir literales de cadena.

string (C# Reference, MSDN)

literales de cadena Verbatim comienzan con @ y también están encerrados entre comillas dobles.Por ejemplo:

@"good morning" // a string literal

La ventaja de las cadenas literales es que las secuencias de escape no son procesados, lo que hace que sea fácil de escribir, por ejemplo, un nombre de archivo completo:

@"c:\Docs\Source\a.txt" // rather than "c:\\Docs\\Source\\a.txt"

Un lugar en el que he utilizado es en un patrón de expresión:

string pattern = @"\b[DdFf][0-9]+\b";

Si usted tiene una cadena en una variable, no es necesario hacer una "literal" fuera de él, ya que si es así formado, ya tiene los contenidos correctos.

Cuestiones relacionadas