String.Replace无法正常工作

Ash*_*ani 9 c# replace

这很奇怪,因为我已经使用了Replace功能数千次.这是我的代码:

while (d.IndexOf("--") != -1) d=d.Replace("--", "-");
Run Code Online (Sandbox Code Playgroud)

这是我跟踪时变量d的值:

"?????,??? ????,girl name,??????--?-???-??-???-???-?-????-??-???-?????-????-??????-???-??-???"
Run Code Online (Sandbox Code Playgroud)

但是当d的值是:

"?????,??? ????,girl name,??????-?-???-??-???-???-?-????-??-???-?????-????-??????-???-??-???"
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么?有趣的是,甚至破折号都是以编程方式添加的.

bas*_*rat 19

那是因为:

var d1 = "?????,??? ????,girl name,??????--?-???-??-???-???-?-????-??-???-?????-????-??????-???-??-???";
Run Code Online (Sandbox Code Playgroud)

与此不一样:

var d2 = "?????,??? ????,girl name,??????---???-??-???-???-?-????-??-???-?????-????-??????-???-??-???";
Run Code Online (Sandbox Code Playgroud)

字符串中的最后三个字符实际上并不是unicode -自己动手:

var d1 = "?????,??? ????,girl name,??????--?-???-??-???-???-?-????-??-???-?????-????-??????-???-??-???";
var d2 = "?????,??? ????,girl name,??????---???-??-???-???-?-????-??-???-?????-????-??????-???-??-???";
while (d.IndexOf("--", StringComparison.Ordinal) != -1) d1 = d1.Replace("--", "-");
Console.WriteLine(d1); // the last characters are left 
while (d2.IndexOf("--", StringComparison.Ordinal) != -1) d2 = d2.Replace("--", "-");
Console.WriteLine(d2); // All clear 
Run Code Online (Sandbox Code Playgroud)

仅供参考:字符串比较方法indexof是特定于文化的.我会用:

var d = "?????,??? ????,girl name,??????--?-???-??-???-???-?-????-??-???-?????-????-??????-???-??-???";
while (d.IndexOf("--", System.StringComparison.Ordinal) != -1) 
      d = d.Replace("--", "-");
Run Code Online (Sandbox Code Playgroud)

因为它使用序数规则,即文化独立的unicode值,并且运行得更快.