Использование литерала '@' со строковой переменной - PullRequest
6 голосов
/ 23 сентября 2008

У меня есть вспомогательный класс, извлекающий строку из файла XML. Эта строка является путем к файлу (поэтому она имеет обратную косую черту). Мне нужно использовать эту строку как есть ... Как я могу использовать ее, как если бы я использовал буквальную команду?

Вместо этого:

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

Я хочу сделать это:

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

Это не то, как я на самом деле использую это; это просто чтобы прояснить то, что я имею в виду. Есть какой-то .ToLiteral () или что-то?

Ответы [ 6 ]

14 голосов
/ 23 сентября 2008

Не думаю, что вам стоит беспокоиться об этом, если у вас уже есть значение. Оператор @ предназначен для указания строки (как в первом фрагменте кода).

Что вы пытаетесь сделать со строкой пути, которая не работает?

4 голосов
/ 23 сентября 2008

Я не уверен, что понимаю. В вашем примере: если helper.getFilePath () возвращает «c: \ somepath \ file.txt», проблем не будет, так как символ @ необходим, только если вы явно указали строку с помощью «». Когда функции «общаются», вы всегда получаете буквальный путь. Если XML содержит c: \ somepath \ file.txt и ваша функция возвращает c: \ somepath \ file.txt, то строка filePath также будет содержать «c: \ somepath \ file.txt» в качестве допустимого пути.

2 голосов
/ 23 сентября 2008

В C # символ @ в сочетании с двойными кавычками позволяет писать экранированные строки. Э.Г.

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

Если вы не используете его, вам нужно использовать escape-символ в ваших строках.

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

Вам не нужно указывать это где-либо еще в коде. На самом деле это должно вызвать ошибку компилятора.

1 голос
/ 23 сентября 2008

@ "" облегчает написание строковых литералов.

строка (C # Reference, MSDN)

Строковые литералы начинаются с @ и также заключаются в двойные кавычки. Например:

@"good morning" // a string literal

Преимущество стенографических строк заключается в том, что escape-последовательности не обрабатываются, что позволяет легко написать, например, полное имя файла:

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

Единственное место, где я его использовал, это шаблон регулярных выражений:

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

Если в переменной есть строка, вам не нужно делать из нее «литерал», поскольку, если она правильно сформирована, она уже имеет правильное содержимое.

1 голос
/ 23 сентября 2008

Строка, возвращаемая из вашего вспомогательного класса, не является литеральной строкой, поэтому вам не нужно использовать символ '@' для удаления поведения обратной косой черты.

1 голос
/ 23 сентября 2008

Ты получил это задом наперед. @ -Оператор предназначен для преобразования литералов в строки, сохраняя при этом все прикольные символы. Ваш путь уже является строкой - вам вообще ничего не нужно делать с ним. Просто потеряй @.

string filePath = helper.getFilePath();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...