Сериализация строки с обратной косой чертой - PullRequest
1 голос
/ 11 августа 2010

Моя программа должна обработать строку ввода.Но когда "\ mesg" отправляется в Method1, вместо блока if выполняется блок else.

 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, когда я пытаюсь десериализовать.Просто чтобы справиться с этим, я хочу добавить еще одну косую черту, "\ 0Mesg", перед сериализацией строки.

Как я могу заставить ее работать как положено?

Ответы [ 2 ]

2 голосов
/ 11 августа 2010

Ваше первое условие не выполнится, так как оно ищет двойную косую черту, тогда как str содержит одну косую черту.

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

str не произведет ожидаемого возврата, поскольку \ является escape-символом.

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("\\", "\\\\");
}
0 голосов
/ 11 августа 2010

Ваш код в основном правильный, вам не хватает чего-то важного для его работы, хотя ...

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 () НЕ изменяет саму строку, она возвращает измененную строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...