2012-01-03 18 views
5

我有以下的類作爲DataSource一個列表框:代表一個字符與等價的字符串

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 2012-01-03 11:37:24

+0

事情是,我希望它在ToString方法顯示\ t而不是一個正常的選項卡。 – 2012-01-03 11:38:36

+0

然後不要使用製表符,而是使用字符串'\ t'。 – Oded 2012-01-03 11:40:33

回答

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的表示現在是'「Tab \'\ t \」''好像每個人都被轉義了:P – 2012-01-03 12:06:58

+0

@ Sean87:如果你這樣使用它:'return toLiteral Value.ToString());'? (我會自己測試一下,但我即將離開工作,並在Linux機器上)。 – 2012-01-03 12:09:22

+0

我認爲它會是同樣的事情,因爲它會自動轉換爲字符串......這將再次成爲TAAAAAB! ''代替'\ t' – 2012-01-03 12:13:47

4

這裏有一個博客帖子有一些示例代碼:Mark Gu: Escape Sequences in C#

+0

看起來像我會採取的方法...一個簡單的查找表。 – Oded 2012-01-03 11:47:59

相關問題