Может ли кто-нибудь объяснить мне, что символ @"" имеет отношение к методу System.IO.Path.Combine?

Допустим, в моем веб-приложении Visual Studio C# есть папка типа ClientBin.

Я запутался в том, что @"" будет делать в следующем коде C#, который пытается создать путь к каталогу:

String DirectoryPath = System.IO.Path.Combine(@"" + "ClientBin");

Или когда дело доходит до файла fa, как в следующем примере:

String FilePath = System.IO.Path.Combine("admin", "access", @"" + "users.aspx");

По сути, кто-то может объяснить мне, что "@" имеет отношение к методу System.IO.Path.Combine?

6 ответов

Решение

Добавление @ означает, что любые последовательности escape-символов игнорируются, и строка берется в том виде, в котором она написана. Не совсем, см. Ссылку ниже.

@ "C: \ Temp\file.txt"

такой же как

"C:\\ Temp\\file.txt"

Во втором случае \\ sequence означает экранированный символ обратной косой черты.

обновление: DTB прав насчет этого

увидеть строковые литералы

В этом случае он абсолютно ничего не делает (вероятно, это вызвано крайне ошибочным программистом где-то по пути). Как правило, @ before строка указывает дословный строковый литерал, где обратные слеши больше не обрабатываются как escape-символы.

Вот, @"" + "ClientBin" точно равно "" + "ClientBin"что, конечно, равно просто "ClientBin",

Дословные строковые литералы объясняются здесь.

@"" является дословным строковым литералом (также см. http://msdn.microsoft.com/en-us/library/ms228362.aspx), что в основном означает, что обратные слэши и символы новой строки принимаются дословно, а не анализируются. Использование обычно что-то вроде @"\ClientBin" или же @"[a-b]\*", То, как код, который вы показываете, использует его, совершенно бессмысленно, так как @"" а также "" оба являются пустой строкой, и вы получите тот же результат, просто написав "ClientBin",

Вот простое объяснение, если вы заинтересованы в просмотре

Символ @ служит двум целям в C#:

Во-первых, это позволяет вам использовать зарезервированный keyowrd в качестве переменной:

int @int = 15;

Второй вариант позволяет вам указать строку без необходимости исключать символы. Например, символ '\' является escape-символом, поэтому обычно вам нужно сделать это:

var myString = "c:\\myfolder\\myfile.txt"

В качестве альтернативы вы можете сделать это:

var myString = @"c:\myFolder\myfile.txt"

Префикс @ является дословной строкой, но в приведенных вами примерах я не думаю, что это имеет какое-либо влияние; дословно @"" эквивалентно нормальному "".

Редактировать: В случае, если вы не понимаете, что такое дословные строки, они по сути позволяют вам представлять строку, не беспокоясь о escape-последовательностях - например, \n НЕ будет отображаться как новая строка в дословном переводе. строка, а скорее как фактическая строка \ n. Чтобы представить новую строку, вам нужно создать новую строку в коде, подобном этому.

@ говорит компилятору не обрабатывать символы в следующем строковом литерале как особые.

например, если у вас есть "C:\Temp\users.aspx", компилятор будет пытаться обрабатывать \ T и \ u как специальные символы (например, \ r \ n- это возврат каретки, перевод строки) и, возможно, произойдет сбой при запуске -время.

Если у вас нет @, вам нужно изменить строку на

"C:\\Temp\\users.aspx" 

что некрасиво и трудно читать ИМХО.

Другие вопросы по тегам