我的程序应该处理输入字符串。但是当在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”。
如何让它按预期工作?
答案 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()不修改字符串本身,它返回修改后的字符串。