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

Using Contains or IndexOf with counter in C#

我正在尝试将计数器与替换一起使用,但没有成功。

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

输出为:

Object0
Object0
Object0

我预计

Object0
Object1
Object2

相反。我怎样才能得到那个输出?

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

表达式"Object" + ObjN++ 将在调用Replace 方法之前计算一次,而不是每次替换都计算一次。使用循环没有帮助,因为 Replace 方法将替换所有实例,而不仅仅是第一个实例。

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

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