如何在运行时值中使用.NET样式的转义序列

本文关键字:NET 样式 转义序列 运行时 | 更新日期: 2023-09-27 17:59:16

当我在XML配置文件中写入分隔符值时,我遇到了这个问题,通常当你在XML配置中写入像"'t"这样的字符串时,像XDocument这样的解析器类会自动将其转换为@"''t",这样你就可以从从配置中解析的字符串中获得一个反斜杠和一个't'。然而,我想要的只是一个制表符,而不是两个字符的字符串。

因此,问题变成了:给定一个包含像"'t"这样的转义序列的字符串,我如何将其转换为一个字符选项卡?

如何在运行时值中使用.NET样式的转义序列

去掉@前缀怎么样?

逐字和普通字符串文字是在源代码中编写字符串的方法。在运行时,它们之间没有区别。那么它们只是简单的字符串。

如果您想在运行时处理转义序列,可以执行以下操作:

string ReplaceEscapeSequences(string s)
{
  Contract.Requires(s != null);
  Contract.Ensures(Contract.Result<string>() != null);
  StringBuilder sb = new StringBuilder();
  for(int i = 0; i < s.Length; i++)
  {
    if(s[i] == '''')
    {
      i++;
      if(i == s.Length)
        throw new ArgumentException("Escape sequence starting at end of string", s);
      switch(s[i])
      {
        case '''':
          sb.Append('''');
          break;
        case 't':
          sb.Append(''t');
          break;
        ...
      }
    }
    else sb.Append(s[i]);
  }
  return sb.ToString();
}

您可以这样做:

stringValue = stringValue.Replace("''t", "'t");

我编写了以下方法来替换一堆常见的转义字符序列。

    public static string LiteralValue(this string value)
    {
        return value
            .Replace("''''", "''")
            .Replace("''a", "'a")
            .Replace("''b", "'b")
            .Replace("''f", "'f")
            .Replace("''n", "'n")
            .Replace("''r", "'r")
            .Replace("''t", "'t")
            .Replace("''v", "'v")
            .Replace("''0", "'0");
    }