首页 > 解决方案 > 将字符串附加到 StringBuilder 对象时如何保留转义字符?

问题描述

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

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

你好,

我的名字是汤姆。

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

Hello,\r\nMy name is Tom. 

但是一旦我将它附加到 StringBuilder ,它就会删除所有转义字符并变成这样:

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();
}

标签: c#stringbuilderstring-literals

解决方案


我不确定你的问题到底是什么,但我可以肯定地告诉你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));
}

推荐阅读