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

时间:2008-09-23 12:45:49

标签: c# string

我有一个帮助类从XML文件中提取字符串。该字符串是一个文件路径(因此它有反斜杠)。我需要使用那个字符串......我怎样才能像使用文字命令那样使用它?

而不是:

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

我想这样做:

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

这不是我实际使用它的方式;只是为了让我的意思更清楚一点。是否有某种.ToLiteral()或其他东西?

6 个答案:

答案 0 :(得分:14)

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

您尝试使用无效的路径字符串做什么?

答案 1 :(得分:4)

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

答案 2 :(得分:2)

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

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

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

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

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

答案 3 :(得分:1)

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

string filePath = helper.getFilePath();

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

string (C# Reference, 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";

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