将字符串附加到StringBuilder对象时,如何保留转义符?

时间:2019-01-22 17:35:34

标签: c# stringbuilder string-literals

我试图将用户输入的字符串添加到StringBuilder中,然后可以在其他地方使用它来显示我正在构建的字符串。问题是,当用户执行回车时,我尝试将其附加到StringBuilder上,它将删除转义字符,并因此删除回车。

例如,假设用户输入以下内容:

Hello,

My name is Tom.

当我从文本框控件中提取该字符串并将其传递给保存StringBuilder的方法时,它看起来像这样:

Hello,\r\nMy name is Tom. 

但是一旦我将其附加到StringBuilder上,它将删除所有转义字符并变为:

Hello,My name is Tom. 

这将导致输出为:

Hello,My name is Tom

代替:

Hello,

My name is Tom

这是从ctrl中拉出用户输入的方法

protected List<BetweenTagData> BetweenTagDataPull(string ctrlName)
{
    List<BetweenTagData> data = new List<BetweenTagData>();
    BetweenTagData pullIt = new BetweenTagData();

    if (ctrlName == "Label")
    {
        pullIt.text = TagLabelTxtbxEnterText.Text.ToString();
        data.Add(pullIt);
    }

    return data;
}

这是使用StringBuilder构建字符串的方法

static public string TagBetween(List<BetweenTagData> betweenData)
{
    StringBuilder betweenString = new StringBuilder();
    foreach (BetweenTagData row in betweenData.ToList())
    {
        if (row.text != "")
        {
            betweenString.Append(row.text);
        }
    }

    return betweenString.ToString();
}

1 个答案:

答案 0 :(得分:0)

我不确定您到底是什么问题,但是我可以肯定地告诉您StringBuilder类型并不关心或更改这些字符。真正的问题更有可能在BetweenTagData类中出现。我还可以帮助您改善现有方法:

protected List<BetweenTagData> BetweenTagDataPull(string ctrlName)
{
    List<BetweenTagData> data = new List<BetweenTagData>();

    if (ctrlName == "Label")
    {
        data.Add(new BetweenTagData() {text = TagLabelTxtbxEnterText.Text});
    }

    return data;
}

static public string TagBetween(IEnumerable<BetweenTagData> betweenData)
{
    return string.Join("", betweenData.Where(bd => !string.IsNullOrEmpty(bd.text)).Select(bd => bd.text));
}