C# 在C中与计数器一起使用Contains或IndexOf#

C# 在C中与计数器一起使用Contains或IndexOf#,c#,replace,C#,Replace,我正在尝试使用一个带有Replace的计数器,但没有成功 int ObjN = 0; while (editor.Rtf.Contains("CreateObject") == true) { editor.Rtf = editor.Rtf.Replace("CreateObject", "Object" + ObjN++); } 输出为: Object0 Object0 Object0 我预料 Object0 Object1 Object2 相反。如何获得该输出?问题是您的repla

我正在尝试使用一个带有Replace的计数器,但没有成功

int ObjN = 0;
while (editor.Rtf.Contains("CreateObject") == true) 
{
 editor.Rtf = editor.Rtf.Replace("CreateObject", "Object" + ObjN++);
}
输出为:

Object0
Object0
Object0
我预料

Object0
Object1
Object2

相反。如何获得该输出?

问题是您的replace语句将替换字符串中“CreateObject”的所有实例,它在替换第一个实例后不会停止。去掉replace行,而是使用.IndexOf搜索第一个实例的索引,然后手动替换它。

在调用
replace
方法之前,将对表达式
“Object”+ObjN++
求值一次,而不是每次替换。拥有循环没有帮助,因为
Replace
方法将替换所有实例,而不仅仅是第一个实例

如果使用
Regex.Replace
可以指定一个函数来创建值:

int cnt = 0;
editor.Rtf = Regex.Replace(editor.Rtf, "CreateObject", m => "Object" + (cnt++));

即使标题与您发布的代码也没有意义。“m=>”是什么意思?匹配?@Tom:这是一个lambda表达式,是编写函数的一种简短方式。
m
将是函数中的参数,它是
Replace
方法调用函数的
Match
对象。