什么是此任务的最佳解决方案:

有一个模板字符串,例如:"<CustomAction Id=<newGuid> /><CustomAction Id=<newGuid> />",我需要用不同的Guid替换<newGuid>

概括问题:

.Net字符串类的Replace方法带有2个参数:char或字符串类型的oldValue和newValue。问题是newValue是静态字符串(不是函数返回字符串)。

我有一个简单的实现:

public static string Replace(this string str, string oldValue, Func<String> newValueFunc)
    {
      var arr = str.Split(new[] { oldValue }, StringSplitOptions.RemoveEmptyEntries);
      var expectedSize = str.Length - (20 - oldValue.Length)*(arr.Length - 1);
      var sb = new StringBuilder(expectedSize > 0 ? expectedSize : 1);
      for (var i = 0; i < arr.Length; i++)
      {
        if (i != 0)
          sb.Append(newValueFunc());
        sb.Append(arr[i]);
      }
      return sb.ToString();
    }


您能提出更优雅的解决方案吗?

最佳答案

我认为是时候总结一下以避免错误答案了。

leppieHenk Holterman提出了最优雅的解决方案:

public static string Replace(this string str, string oldValue, Func<string> newValueFunc)
{
  return Regex.Replace( str,
                        Regex.Escape(oldValue),
                        match => newValueFunc() );
}

10-08 14:02