【问题标题】:C# '@' before a String [duplicate]字符串前的C#'@'[重复]
【发布时间】:2011-06-20 05:34:43
【问题描述】:

可能重复:
What's the @ in front of a string for .NET?

我在一本 C# 学习书中找到了这个

DirectoryInfo dir = new DirectoryInfo(key.Key.ToString() + @":\");

然而,这本书并没有解释“@”符号的用途。我尝试搜索MSDN C# Operators,但它没有在那里列出。我可以猜测它允许开发人员不必转义 '\' 还是允许没有任何转义序列?

这是为了什么?为什么我要使用@":\" 而不是":\\"

感谢您的帮助

编辑:有关类似问题,请参阅下面的评论

【问题讨论】:

  • 我能否指出以重复的形式关闭并列出有这种感觉的人的姓名而不是重复帖子的链接是多么适得其反?您没有采取任何措施阻止 Google 将人们引导至您也不允许回答的此页面,也没有提供任何链接...
  • @Dan 可能重复的链接位于“可能重复”下方的顶部和“已链接”下方的右侧

标签: c# .net


【解决方案1】:

意思是按字面意思解释字符串(也就是说,如果使用@前缀,则不能对字符串中的任何字符进行转义)。它在可以使用的情况下增强了可读性。

例如,如果您使用的是 UNC 路径,则:

@"\\servername\share\folder"

比这更好:

"\\\\servername\\share\\folder"

【讨论】:

  • 嗯,你可以通过将它们加倍来逃避“,即string S = @""""; Console.Write("[{0}]", S);[""]
  • @Mark 那么字符串中的任何转义序列都会被忽略并在文字文本中处理?
  • @Daniel:正确;否则将被反斜杠转义的任何序列都将被逐字处理。 msdn.microsoft.com/en-us/library/362314fe(v=VS.100).aspx 进一步解释并举例说明。
  • @Mark 该链接正是我所需要的 - 谢谢
  • +1,我从来没有意识到你可以加倍“来逃避它。我一直讨厌使用@时无法逃避”。我现在觉得很笨。谢谢...
【解决方案2】:

这也意味着你可以使用保留字作为变量名

假设你想要一个名为 class 的类,因为 class 是保留字,你可以改为调用你的类 class:

IList<Student> @class = new List<Student>();

【讨论】:

  • 这很酷——我不知道你能做到。谢谢
  • 正确但离题。
【解决方案3】:

以@为前缀的字符串表示应将其视为文字,即不能转义。

例如,如果您的字符串包含路径,您通常会这样做:

string path = "c:\\mypath\\to\\myfile.txt";

@ 允许您这样做:

string path = @"c:\mypath\to\myfile.txt";

注意缺少双斜线(转义)

【讨论】:

    【解决方案4】:

    作为旁注,您还应该记住,“转义”意味着“使用反斜杠作为特殊字符的指示符”。您可以将行尾放在一个字符串中,例如:

    String foo = "Hello\
    
    There";
    

    【讨论】:

    • +1 我一直认为换行符是专门针对 @"... 风格的
    【解决方案5】:

    这是为了什么,为什么我要使用 @":\" 而不是 ":\"?

    因为当您有一个包含许多 \ 的长字符串时,您不需要全部转义它们,\n\r\f 也不起作用。

    【讨论】:

    • 对不起,“字符串”这个词拼错了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2019-10-05
    • 2015-03-27
    • 2015-06-07
    • 2016-03-09
    • 2014-09-19
    相关资源
    最近更新 更多