2012-01-03 13 views
5

Tengo la siguiente clase como un DataSource para un cuadro de lista:Representando una Char con cadena equivalente

class SeparatorChars 
{ 
    /// <summary> 
    /// Text to describe character 
    /// </summary> 
    public string Text { get; set; } 

    /// <summary> 
    /// Char value of the character 
    /// </summary> 
    public char Value { get; set; } 

    /// <summary> 
    /// Represent object as string 
    /// </summary> 
    /// <returns>String representing object</returns> 
    public override string ToString() 
    { 
     return Text + " '" + Value + "'"; 
    } 
} 

El problema es que esto por defecto utilizará el Value al igual que un personaje regular añadió a una cadena, por ejemplo, si defino esta clase para Tab así:

var TabSeparator = new SeparatorChars {Text = "Tab", Value = '\t'} 

La representación de cadena será:

Tab '  ' 

Pero lo necesito para ser

Tab '\t' 

Cómo hacer esto ?!

+0

'\ t' es el carácter de tabulación. Parece que está obteniendo una pestaña entre el ''''. Me parece bien ¿Me estoy perdiendo de algo? ¿Por qué quieres dar salida a la cadena '\ t'? – Oded

+0

La cosa es, quiero que en el método ToString muestre \ t en lugar de una pestaña normal. –

+0

Entonces no use un carácter de tabulación sino la cadena '\ t'. – Oded

Respuesta

6

Es cierto que arrancó en su mayoría de this post y no probado.

public override string ToString() 
{ 
    return ToLiteral(Text + " '" + Value + "'"); 
} 

private string ToLiteral(string input) 
{ 
    var writer = new StringWriter(); 
    CSharpCodeProvider provider = new CSharpCodeProvider(); 
    provider.GenerateCodeFromExpression(new CodePrimitiveExpression(input), writer, null); 
    return writer.ToString(); 
} 
+0

Hmmm gracias, esto funciona de alguna manera ... la representación de la pestaña ahora es '" Tab \ '\ t \ "'' Parece que todo se ha escapado: P –

+0

@ Sean87: ¿Qué pasa si lo usa así: 'return ToLiteral (Value.ToString()); '? (Lo probaría yo mismo, pero estoy a punto de irme para trabajar y en un linux box). –

+0

Creo que será lo mismo, ya que se transferirá automáticamente a la cadena ... eso volverá a ser '' ¡TAAAAAB! '' en lugar de '\ t' –

Cuestiones relacionadas