什么是此任务的最佳解决方案:
有一个模板字符串,例如:"<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();
}
您能提出更优雅的解决方案吗?
最佳答案
我认为是时候总结一下以避免错误答案了。
leppie和Henk Holterman提出了最优雅的解决方案:
public static string Replace(this string str, string oldValue, Func<string> newValueFunc)
{
return Regex.Replace( str,
Regex.Escape(oldValue),
match => newValueFunc() );
}