C# 通过字符串循环-不变性问题

C# 通过字符串循环-不变性问题,c#,regex,string,C#,Regex,String,我需要对一个字符串进行多次检查和修改(搜索和替换不同的序列),但它不能正常工作。我想这是因为不变性 private string DoRegexCheck(string line) { string pattern; foreach (string re in this.regexPatterns.Items) { pattern = re; Regex r = new Regex(pattern, RegexOptions.IgnoreCase); lin

我需要对一个字符串进行多次检查和修改(搜索和替换不同的序列),但它不能正常工作。我想这是因为不变性

private string DoRegexCheck(string line)
{
  string pattern;

  foreach (string re in this.regexPatterns.Items)
  {
    pattern = re;
    Regex r = new Regex(pattern, RegexOptions.IgnoreCase);
    line=r.Replace(line, ""); //the line should be updated and the check should continue with updated line 
  }                            

  return line;
}
“工作不好”有点模棱两可

如果您的意思是“它没有改变
,那么代码就没问题了。不可变性根本不是问题,因为我们正在改变一个新的字符串,每个
替换
(如图所示的代码不会试图编辑现有字符串)。如果它没有按预期更新,那么您的
Regex
模式就是不正确的



如果您指的是性能:您不能改变
Regex
处理字符串的方式;但是,我建议使用
Compiled
选项缓存各种Regex,这样您就有了一个预编译
Regex
的数组或字典,可以重复使用。如果对数千行
应用此选项,这一点尤其重要s.

我知道,我只需要字符串“行“要在每次迭代中真正更新。我认为有正则表达式并不重要,它与任何其他字符串更改操作都是一样的。@user970696相反;它是
Regex
非常重要,因为每个
Regex.Replace
都接受一个
字符串
,并返回一个(通常不同的)
字符串
。其他一些API可能采用
char*
StringBuilder
<代码>正则表达式
没有。然而,我认为现在就认定
string
不变性是问题还为时过早。症状是什么?你告诉我们的只是“工作不好”。如果您指的是性能,那么在不进行预编译的情况下处理这些
Regex
的开销应该大大超过
string
的不变性。先把它修好。奇怪,它应该能用。不应存在不变性问题:
Regex.Replace
只会创建一个新的
string
实例,该实例将分配给
变量。你说它工作不好是什么意思?怎么了?@Pavel Gatilov:它只是没有替换序列,但当我一个接一个地尝试它们时,它确实起了作用。如果你的意思是“我的线路没有改变”,那么很简单:你的正则表达式模式是错误的。更新行的代码很好。请展示一些我们可以用来重现的实际样本数据,即一个样本
,一些样本模式,以及所需的/实际输出。(附加提示:请非常非常明确地说明您看到的问题是什么,而不是说“它工作不正常”)