2013-12-23 80 views
2

我已经尝试了很长时间来弄清楚发生了什么,但是除了我之外,还没有发现有人遇到过这个问题。C#逐字字符串文字不起作用。非常奇怪的反斜杠总是加倍

我只是试图硬编码到一个字符串的路径。简单的东西。以及由于某种原因

string fullPathSourceFile = @"c:\SQLSOURCE.txt"; 

正在评估到c:\\SQLSOURCE.txt

我用尽了一切办法将其评价为一个反斜杠去掉双引号,它不会工作。我甚至试过Replace(@"\\", @"\"),它没有任何影响。任何人都知道我的代码会发生什么情况,当应该评估一个代码时会强制产生双反斜杠。这让我感到疯狂,这很容易,但却让我感到很沮丧。

我然后用下面的字符串变量:

   using (StreamReader reader = new StreamReader(fullPathSourceFile)) 
       { 
        string line; 

        while ((line = reader.ReadLine()) != null) 
        { 
         sqlDBsource = line.ToString(); 
        } 

        reader.Close(); 
       } 

感谢大家的输入,帮助我找出我做错了。在Visual Studio中(这很让人困惑),当您查看调试器中字符串的值时,它会为您放置转义符,因此观察窗口或变量值弹出窗口中的双反斜杠是正常的,并不意味着实际上存在两个反斜杠。将鼠标悬停在监视窗口中时,单击工具提示/窗格右侧的放大镜图标,这会显示未打印的字符串将显示在控制台上。另一种显示实际结果的方法是:Console.WriteLine(the_problem_string);我在代码中遇到的问题超出了帖子的范围,但是我从Visual Studio看到的结果混乱让我相信,当字符串不是问题时,字符串就是问题的根源。

+0

问题在哪里,它似乎按预期工作。 – user1336827

+0

嗯...那么问题是什么?我在你的问题的任何地方都看不到双反斜杠。 – ohiodoug

+0

我刚编辑它显示双反斜杠; SO标记隐藏了它。 –

回答

0

这是一个奇怪的。所以我删除了评论中建议的逐字记录,它在字符串中使用双反斜杠时起作用。由于某些原因,代码不喜欢逐字字符串,并且错误地翻译了反斜​​杠。这解决了这个问题。如果有人遇到这种情况,您可能需要使用逐字/非逐字字符串,因为在某些情况下,编译器更喜欢非逐字。

+2

作为未来的读者:我非常强烈地怀疑这*不是*编译器问题,实际上是诊断失败。编译器错误是很少见的,但是开发人员经常被Visual Studio调试器困惑,认为字符串中有更多的反斜杠比实际情况更多。如果有疑问,请用“Console.WriteLine”之类的东西显示字符串。逐字字符串文字“@”c:\ SQLSOURCE.txt“'当然不会以包含双反斜杠的字符串对象结束。 –