0

假设我的 Visual Studio C# Web 应用程序中有一个类似于 ClientBin 的文件夹。

我对@"" 将在以下 C# 代码中尝试创建目录路径的作用感到困惑:

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

或者当涉及到 fa 文件时,如下例所示:

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

基本上,有人可以向我解释一下 @"" 与 System.IO.Path.Combine 方法有什么关系吗?

4

6 回答 6

8

在这种情况下,它完全没有任何作用(可能是由于某个地方的某个极度误导的程序员造成的)。通常,@字符串之前的字符串指定逐字字符串文字,其中反斜杠不再被视为转义字符。

在这里,@"" + "ClientBin"恰好等于"" + "ClientBin",当然也等于"ClientBin"

逐字字符串文字在这里解释。

于 2012-07-12T21:47:51.737 回答
5

添加@ 意味着忽略任何转义字符序列,并在写入时采用字符​​串。不完全是,请看下面的链接。

@"C:\temp\file.txt"

是相同的

"C:\\temp\\file.txt"

在第二种情况下 \\ 序列表示转义的反斜杠字符。

更新:dtb 是对的

字符串文字

于 2012-07-12T21:47:19.873 回答
5

@""逐字字符串文字(另请参阅http://msdn.microsoft.com/en-us/library/ms228362.aspx),这基本上意味着反斜杠和换行符是逐字而不是解析的。用法通常类似于@"\ClientBin"or @"[a-b]\*"。您显示的代码使用它的方式非常荒谬,因为@""两者""都是空字符串,您只需编写"ClientBin".

于 2012-07-12T21:48:05.357 回答
1

@ 前缀是逐字字符串,但在您提供的示例中,我认为它没有任何效果;逐字的@"" 等同于普通的""。

编辑:如果您对逐字字符串是什么感到困惑,它们本质上允许您做的是表示一个字符串而不必担心转义序列 - 例如, \n 不会逐字呈现为新行字符串,而是作为实际的字符串 \n。要表示一个新行,您实际上是在这样的代码中创建一个新行。

于 2012-07-12T21:48:47.223 回答
1

@ 告诉编译器不要将以下字符串文字中的任何字符视为特殊字符。

例如,如果您有“C:\Temp\users.aspx”,编译器将尝试将 \T 和 \u 视为特殊字符(如 \r\n 是回车符、换行符),并且可能会在运行时失败-时间。

如果您没有@,则必须将字符串更改为

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

恕我直言,这很难看。

于 2012-07-12T21:50:05.240 回答
1

如果您有兴趣查看,这里是一个简单的解释

@ 符号在 C# 中有两个用途:

首先是它允许您使用保留的 keyowrd 作为变量,如下所示:

int @int = 15;

第二个选项允许您指定一个字符串,而不必排除任何字符。例如 '\' 字符是一个转义字符,所以通常你需要这样做:

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

或者你可以这样做:

var myString = @"c:\myFolder\myfile.txt"
于 2012-07-12T21:56:08.197 回答