2012-01-03 7 views
5

У меня есть следующий класс как DataSource для ListBox:Представляя Char с эквивалентной строкой

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 + "'"; 
    } 
} 

Проблема заключается в том, это по умолчанию будет использовать Value так же, как обычный символ добавляется в строку, для пример, если я определяю этот класс для Tab так:

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

Строковое представление будет:

Tab '  ' 

Но мне это нужно, чтобы быть

Tab '\t' 

Как это сделать ?!

+0

'\ t' является символом табуляции. Похоже, вы получаете вкладку между '' ''. Смотрит прямо на меня. Я что-то упускаю? Почему вы хотите вывести строку '\ t'? – Oded

+0

Вещь, я хочу, чтобы она в методе ToString отображала \ t вместо обычной вкладки. –

+0

Затем не используйте символ табуляции, кроме строки '\ t'. – Oded

ответ

6

Правда рваные в основном из this post и тестировалась.

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

Хммм спасибо, это работает как-то ... представление для вкладки теперь '' Tab \ '\ t \ "'' Кажется, что каждый из них экранирован: P –

+0

@ Sean87: Что делать, если вы используете его вот так: 'return ToLiteral (Value.ToString()); '? (Я бы сам ее протестировал, но я собираюсь уйти на работу и на Linux-бокс). –

+0

Я думаю, что это будет то же самое, поскольку он будет автоматически переведен на строку ... это будет снова '' TAAAAAB! ''вместо' \ t ' –

4

Вот блог с некоторыми примерами кода: Mark Gu: Escape Sequences in C#

+0

Похож на подход, который я бы взял ... Простой поиск Таблица. – Oded

Смежные вопросы