使用反斜杠序列化字符串

时间:2010-08-11 12:13:47

标签: c# replace

我的程序应该处理输入字符串。但是当在Method1中发送“\ mesg”时,将执行else块而不是if块。

 void Method()
 {
     string str = "\\Mesg";
     str = Method1(str);
     Console.WriteLine(str);
 }

 string Method1(string s)
 {
     string upadtedString = s;
     if (s.Contains(@"\\"))
     {
         //do nothing
     }
     else if(s.Contains(@"\"))
     {
         upadtedString.Replace(@"\",@"\\");
         s = upadtedString;
     }
     return s;
 }

最好的例子是“\ 0Mesg”是Method1()的输入。当我尝试反序列化时,这会引发XML serilaziation异常。为了解决这个问题,我想在序列化字符串之前添加另一个斜杠“\ 0Mesg”。

如何让它按预期工作?

2 个答案:

答案 0 :(得分:2)

你的第一个条件会失败,因为它正在搜索双斜杠,而str包含一个斜杠。

Console.WriteLine(@"\\");  // Double slash
Console.WriteLine("\\");   // Single slash
Console.WriteLine("\\\\"); // Double slash
Console.WriteLine(@"\");   //"// Single slash

str不会产生您希望返回的内容,因为\是转义字符。

string str = "\\Mesg";
Console.WriteLine(str); // Returns: "\Mesg"

试试这个

string myString = "\\Mesg";
Console.WriteLine(myString); // Returns: \Mesg
Console.WriteLine(EscapeSlashes(myString)); //Returns; \\Mesg

public static string EscapeSlashes(string str)
{
    return str.Replace("\\", "\\\\");
}

答案 1 :(得分:0)

你的代码基本上是正确的,但是你遗漏了一些重要的东西,但它可以工作......

void Method() 
{  
    string str = "\\Mesg"; 
    str = Method1(str);  
    Console.WriteLine(str); 
}

string Method1(string s)
{
    string upadtedString = s;
    if (s.Contains(@"\\")
    {
     //do nothing
    }
    else if(s.Contains(@"\"))
    {
          s = upadtedString.Replace(@"\",@"\\");//Change around here
    }
    return s;
} 

你需要抓住被替换的东西。 upadtedString.Replace()不修改字符串本身,它返回修改后的字符串。