Может ли кто-нибудь объяснить мне, что символ @"" имеет отношение к методу 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"
что некрасиво и трудно читать ИМХО.