Моя программа должна обработать входную строку. Но когда в \ 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, когда я пытаюсь десериализовать. Просто чтобы справиться с этим, я хочу добавить еще одну косую черту, "\ 0Mesg", перед сериализацией строки.
Как я могу заставить ее работать как положено?
Ваш код в основном правильный, вы упускаете что-то важное для его работы ...
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 () НЕ изменяет саму строку, он возвращает измененную строку.
Ваше первое условное выражение завершится ошибкой, так как оно ищет двойную косую черту, а 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("\\", "\\\\");
}