【问题标题】:Using the literal '@' with a string variable将文字“@”与字符串变量一起使用
【发布时间】:2008-09-23 12:45:48
【问题描述】:

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

而不是这个:

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

我想这样做:

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

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

【问题讨论】:

    标签: c# string


    【解决方案1】:

    如果您已经拥有价值,我认为您不必担心。 @ 运算符用于您指定字符串时(如在您的第一个代码 sn-p 中)。

    你想对不起作用的路径字符串做什么?

    【讨论】:

    • 哇...今天在电脑上太久了... xml 文件路径是错误的。绝对没有理由我需要做我想做的事,谢谢你让我直截了当……我需要睡觉了!
    • 是的,@ 只会转义您无法合法输入字符串常量的值。当它们已经在变量中时,它们不需要转义,因为您的字符串中没有 \n 的两个字符,您有一个换行符。
    • 我遇到了同样的问题,但最后我发现我的连接字符串是错误的。您的回答让我检查了连接字符串。谢谢。
    【解决方案2】:

    我不确定我是否理解。在您的示例中:如果helper.getFilePath() 返回"c:\somepath\file.txt",则不会有问题,因为仅当您明确指定带有“”的字符串时才需要@。

    当函数相互交谈时,你总是会得到文字路径。如果 XML 包含 c:\somepath\file.txt 并且您的函数返回 c:\somepath\file.txt,则字符串 filePath 也将包含 c:\somepath\file.txt 作为有效路径。

    【讨论】:

      【解决方案3】:

      @"" 只是让编写字符串文字更容易。

      string (C# Reference, MSDN)

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

      @"good morning" // a string literal

      逐字字符串的优点是不处理转义序列,这样写起来很容易,例如一个完全限定的文件名:

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

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

      字符串模式 = @"\b[DdFf][0-9]+\b";

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

      【讨论】:

        【解决方案4】:

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

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

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

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

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

        【讨论】:

          【解决方案5】:

          你把它弄反了。 @-operator 用于将文字转换为字符串,同时保留所有时髦的字符。你的路径已经是一个字符串——你根本不需要对它做任何事情。只是丢了@。

          string filePath = helper.getFilePath();
          

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 2019-11-06
              • 2019-06-18
              • 1970-01-01
              • 2016-09-11
              • 1970-01-01
              • 2013-10-20
              • 2011-07-19
              • 1970-01-01
              相关资源
              最近更新 更多