在字符串变量中使用字面量'@'

7
我是一名有用的助手,能够翻译文本。

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

而不是这样:

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

我想要做这件事:
string filePath = @helper.getFilePath(); //getFilePath returns a string

实际上我并不是这样使用的;只是为了更清楚地表达我的意思。是否有某种.ToLiteral()之类的东西?

6个回答

14

如果您已经有了这个值,我认为您不必担心它。@ 操作符是用于在指定字符串时使用的(就像您的第一个代码片段中一样)。

您试图执行的与路径字符串有关的操作是什么,它没有起作用吗?


2
哇...今天在电脑前呆得太久了...原来只是XML文件路径错了。其实我根本不需要做我一直在尝试的事情,感谢你纠正了我...我需要去睡觉了! - naspinski
是的,@符号只转义那些你无法在字符串常量中合法输入的值。当它们已经在变量中时,它们不需要转义,因为在字符串中你只有一个换行字符,而不是两个字符的\n。 - Omar Kooheji
我曾经遇到过同样的问题,但最后发现我的连接字符串是错误的。你的答案让我检查了连接字符串。谢谢。 - Jagz W

4

我不确定我是否理解了。在你的例子中:如果helper.getFilePath()返回"c:\somepath\file.txt",那么就没有问题,因为只有在明确指定带有""的字符串时才需要@

当函数之间进行交互时,你将始终获得字面路径。如果XML包含c:\somepath\file.txt并且你的函数返回c:\somepath\file.txt,那么字符串filePath也将包含c:\somepath\file.txt作为有效路径。


3

@"" 只是为了更方便地编写字符串字面量。

字符串 (C# 参考, MSDN)

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

@"good morning" // 一个字符串字面量

逐字字符串的优点在于不处理转义序列,因此很容易编写完全限定的文件名:

@"c:\Docs\Source\a.txt" // 而不是 "c:\\Docs\\Source\\a.txt"

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

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

如果您有一个变量中的字符串,则不需要将其制作成“文字”,因为如果它格式正确,则已经具有正确的内容。


2
在C#中,@符号与双引号结合使用可让您编写转义字符串。例如:
print(@"c:\mydir\dont\have\to\escape\backslashes\etc");

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

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

您不需要在代码的其他地方指定它。事实上,这样做应该会导致编译器错误。

1
你的辅助类返回的字符串不是字面字符串,因此你不需要使用 '@' 字符来移除反斜杠的行为。

1
你搞反了。@ 操作符是用来将字面量转换为字符串,同时保留所有奇怪的字符。你的路径已经是一个字符串了 - 你不需要对它做任何事情。只需去掉 @ 符号即可。
string filePath = helper.getFilePath();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接