使用字符串’@’和字符串变量

我有一个帮助类从XML文件中提取字符串。 该字符串是一个文件路径(因此它有反斜杠)。 我需要使用该字符串,因为它…我如何使用它像文字命令一样?

而不是这个:

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

我想做这个:

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

这不是我实际使用它的方式; 只是为了让我的意思更清晰一些。 有某种.ToLiteral()还是什么?

如果你已经拥有价值,我认为你不必担心。 @运算符用于指定字符串(就像在第一个代码段中一样)。

你试图用不起作用的路径字符串做什么?

我不确定我是否理解。 在您的示例中:如果helper.getFilePath()返回“c:\ somepath \ file.txt”,则没有问题,因为只有在明确指定带有“”的字符串时才需要@。 当函数“相互交谈”时,您将始终获得文字路径。 如果XML包含c:\ somepath \ file.txt并且您的函数返回c:\ somepath \ file.txt,则字符串filePath还将包含“c:\ somepath \ file.txt”作为有效路径。

在C#中,@符号与双引号相结合,允许您编写转义字符串。 例如

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

如果你不使用它,那么你需要在字符串中使用转义字符。

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

您不需要在代码中的任何其他位置指定它。 实际上这样做会导致编译器错误。

你已经倒退了。 @ -operator用于将文字转换为字符串,同时保留所有时髦的字符。 你的路径已经是一个字符串 – 你根本不需要做任何事情。 只是失去了@。

 string filePath = helper.getFilePath(); 

从助手类返回的字符串不是文字字符串,因此您不需要使用“@”字符来删除反斜杠的行为。

@“”只是更容易编写字符串文字。

string(C#参考,MSDN)

逐字字符串文字以@开头,也用双引号括起来。 例如:

@"good morning" // a string literal

逐字字符串的优点是不处理转义序列,这使得它易于编写,例如,完全限定的文件名:

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

我使用它的一个地方是正则表达式:

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

如果变量中有一个字符串,则不需要从中创建一个“文字”字符串,因为如果字符串格式正确,则它已经具有正确的内容。