将文字'@'与字符串变量一起使用

时间:2020-03-06 14:35:46  来源:igfitidea点击:

我有一个帮助器类,它从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"作为有效路径。

在Cthe @符号中加上双引号使我们可以编写转义的字符串。例如。

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

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

http://msdn.microsoft.com/zh-CN/library/aa691090(VS.71).aspx

我们无需在代码中的其他任何地方指定它。实际上,这样做会导致编译器错误。

你已经倒退了。 @-运算符用于将文字转换为字符串,同时保留所有时髦字符。路径已经是一个字符串,我们完全不需要对其进行任何操作。只是失去@。

string filePath = helper.getFilePath();

从帮助器类返回的字符串不是文字字符串,因此我们无需使用'@'字符即可消除反斜杠的行为。

@""使得编写字符串文字变得更加容易。

字符串(CReference,MSDN)

Verbatim string literals start with @ and are also enclosed in double quotation marks. For example:
  
  
    @"good morning"  // a string literal

逐字字符串的优点是不处理转义序列,这使编写例如完整的文件名变得容易:

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

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

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

如果变量中有字符串,则不需要在其上加上"字面量",因为如果格式正确,则它已经具有正确的内容。