2012-01-03 11 views
5

Ho la seguente classe come DataSource per un ListBox:Rappresentando un Char con la stringa 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 + "'"; 
    } 
} 

Il problema è, per default userà il Value proprio come un personaggio regolare aggiunto in una stringa, per ad esempio se io definisco questa classe per Tab come questo:

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

La rappresentazione della stringa sarà:

Tab '  ' 

Ma ho bisogno di essere

Tab '\t' 

Come fare questo ?!

+0

'\ t' è il carattere di tabulazione. Sembra che tu stia ricevendo una tabulazione tra "" ". Sembra giusto per me Mi sto perdendo qualcosa? Perché vuoi esportare la stringa '\ t'? – Oded

+0

Il risultato è, lo voglio nel metodo ToString per mostrare \ t al posto di una normale scheda. –

+0

Quindi non utilizzare un carattere di tabulazione ma la stringa '\ t'. – Oded

risposta

6

Certo strappato per lo più da this post e non testato.

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 grazie, funziona in qualche modo ... la rappresentazione per scheda è ora "Tab" \ t \ "" Sembra che tutto sia sfuggito: P –

+0

@ Sean87: Che cosa succede se lo usi in questo modo: 'return ToLiteral (Value.ToString()); '? (Ci proverei da solo, ma sto per partire per lavoro e su una macchina Linux). –

+0

Penso che sarà la stessa cosa, dal momento che si tradurrà in stringa automaticamente ... che sarà di nuovo "TAAAAAB! '' invece di '\ t' –

4

Ecco un post sul blog con un certo codice di esempio: Mark Gu: Escape Sequences in C#

+0

Sembra simile all'approccio che vorrei prendere ... Una semplice ricerca tavolo. – Oded

Problemi correlati