如何在运行时值中使用.NET样式的转义序列
本文关键字:NET 样式 转义序列 运行时 | 更新日期: 2023-09-27 17:59:16
当我在XML配置文件中写入分隔符值时,我遇到了这个问题,通常当你在XML配置中写入像"'t"
这样的字符串时,像XDocument
这样的解析器类会自动将其转换为@"''t"
,这样你就可以从从配置中解析的字符串中获得一个反斜杠和一个't'
。然而,我想要的只是一个制表符,而不是两个字符的字符串。
因此,问题变成了:给定一个包含像"'t"
这样的转义序列的字符串,我如何将其转换为一个字符选项卡?
去掉@
前缀怎么样?
逐字和普通字符串文字是在源代码中编写字符串的方法。在运行时,它们之间没有区别。那么它们只是简单的字符串。
如果您想在运行时处理转义序列,可以执行以下操作:
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");
}