2010-08-11 5 views
1

Mon programme doit traiter une chaîne d'entrée. Mais quand "\ mesg" est envoyé dans Method1, le bloc else est exécuté à la place du bloc if.Sérialisation d'une chaîne avec barre oblique inverse

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; 
} 

Le meilleur exemple est quand "\ 0Mesg" est l'entrée Method1(). Cela déclenche une exception de sérilaziation XML lorsque j'essaie de désérialiser. Juste pour gérer cela, je veux ajouter une autre barre oblique, "\ 0Mesg", avant de sérialiser la chaîne.

Comment puis-je le faire fonctionner comme prévu?

+1

Veuillez fournir du code qui compile mais ne fait pas ce que vous voulez. –

+0

Ceci: 's.Contains (" \ ")' ne compilera pas. Vous devez échapper le '\\'. – Oded

+0

"\\ Mesg" est la chaîne: "\ Mesg" donc il devrait être dans le bloc else. – Rangoric

Répondre

2

La première condition échoue, car elle recherche une double barre oblique, alors que str contient une barre oblique unique.

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

str ne produira pas ce que vous attendez à revenir, puisque \ est un caractère d'échappement.

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

Essayez plutôt

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

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

NO je obtiendrais la chaîne comme "\ tMesg" ou "\ 0Mesg". C'est l'entrée que je reçois. Je dois modifier l'entrée mais caanot demander d'envoyer l'entrée comme "\\\\ Mesg" – myWorld

+0

@ starz26: Vous auriez à élaborer. Je ne comprends pas ce que tu veux dire si ma réponse ne t'a pas répondu. – sshow

+0

Je voulais dire que je ne peux pas demander à l'expéditeur de l'entrée d'envoyer des données sous la forme "\\ Mesg". lorsque l'expéditeur envoie "\ Mesg", je dois modifier dans mon application pour vérifier, remplacer ces caractères par une barre oblique additionnelle afin que je ne sois pas dérouté quand je sérielle la chaîne finalement – myWorld

0

Votre code est fondamentalement correct, il vous manque quelque chose d'important pour que cela fonctionne bien ...

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; 
} 

Vous devez saisir ce qui est remplacé. upadtedString.Replace() ne modifie pas la chaîne elle-même, elle renvoie la chaîne modifiée.

Questions connexes