¿Cómo puedo cadenas Unescape y Reescape en .net?

Necesito un TextBox en un control WPF que pueda incluir texto como Commit\r\n\r (que es la cadena .net "Commit\\r\\n\\r" ) y convertirlo nuevamente a "Commit\r\n\r" como una cadena .net. Esperaba un par de métodos string.Unescape () y string.Escape (), pero parece que no existe. ¿Voy a tener que escribir el mío? o hay una forma mas simple de hacer esto?

 System.Text.RegularExpressions.Regex.Unescape(@"\r\n\t\t\t\t\t\t\t\t\tHello world!") 

Documentación del método Regex.Unescape

Código de Hans, versión mejorada.

  1. Lo hizo usar StringBuilder – un refuerzo de rendimiento real en cadenas largas
  2. Hecho un método de extensión

     public static class StringUnescape { public static string Unescape(this string txt) { if (string.IsNullOrEmpty(txt)) { return txt; } StringBuilder retval = new StringBuilder(txt.Length); for (int ix = 0; ix < txt.Length; ) { int jx = txt.IndexOf('\\', ix); if (jx < 0 || jx == txt.Length - 1) jx = txt.Length; retval.Append(txt, ix, jx - ix); if (jx >= txt.Length) break; switch (txt[jx + 1]) { case 'n': retval.Append('\n'); break; // Line feed case 'r': retval.Append('\r'); break; // Carriage return case 't': retval.Append('\t'); break; // Tab case '\\': retval.Append('\\'); break; // Don't escape default: // Unrecognized, copy as-is retval.Append('\\').Append(txt[jx + 1]); break; } ix = jx + 2; } return retval.ToString(); } } 

Los siguientes métodos son los mismos que las funciones de escape / unescape de JavaScript:

 Microsoft.JScript.GlobalObject.unescape(); Microsoft.JScript.GlobalObject.escape();