C# 字符串中无法识别的转义序列在字符串的替换方法中引发错误
我有一个字符串名,它的C# 字符串中无法识别的转义序列在字符串的替换方法中引发错误,c#,string,C#,String,我有一个字符串名,它的-是一个特殊字符,必须用\-替换 name = name .Contains('-') ? name .Replace('-', '\-') : name; replace方法引发无法识别的转义序列错误 当我试着这么做的时候 name = name .Contains('-') ? name .Replace('-', '\\-') : name; 字符文字中的字符太多 名称的一些示例是: abc-123-45g xyz-1-2-3 ref-124 替换字符的最佳方
-
是一个特殊字符,必须用\-
替换
name = name .Contains('-') ? name .Replace('-', '\-') : name;
replace方法引发无法识别的转义序列错误
当我试着这么做的时候
name = name .Contains('-') ? name .Replace('-', '\\-') : name;
字符文字中的字符太多
名称的一些示例是:
abc-123-45g
xyz-1-2-3
ref-124
替换字符的最佳方法是什么?嗯
\-
不是字符。这是一根绳子
因此,您应该使用重载来获取字符串而不是字符:
name = name.Contains('-') ? name.Replace("-", "\\-") : name;
另外,您实际上不需要包含条件。因此,你最终会:
name = name.Replace("-", "\\-");
使用“
而不是”
?您不需要使用方法。包含(…)
,只需使用。替换(…)
,正如@freefaller所回避的,C中的撇号表示单个字符,而引号表示字符串-这就是为什么”\-”“是的。这里更好地解释一下,我认为包含
条件是为了避免在没有替换字符的情况下创建/分配新的字符串
。我使用VS2017诊断工具/内存使用情况运行了一个测试,可以确认没有新的字符串分配(如果没有替换字符)