C# 为什么所有Word.Range对象在更改其中一个对象时都会更改?

C# 为什么所有Word.Range对象在更改其中一个对象时都会更改?,c#,search,ms-word,range,office-automation,C#,Search,Ms Word,Range,Office Automation,这实际上是一个XY问题,但我想知道这两个问题的答案。 我需要解的是X,我的解是Y,但它不起作用。 我正在研究word自动化,并使用vs10和msWord10 我将从X开始,因为它最有意义 X(真正的问题): 我得到了这个大的动态字符串,其中包含一些我想挑选出来的单词。我想挑出的单词在一个标签中——见下面的例子 例如: 这里有一些文本,可以是任何内容。 !#我想要的文本#! 更多的文字可能是任何东西#我还想再收到一些文字# “!”是起始标记,“!”是结束标记 输出: 我想要的文本 我还想得到一些文

这实际上是一个XY问题,但我想知道这两个问题的答案。 我需要解的是X,我的解是Y,但它不起作用。 我正在研究word自动化,并使用vs10和msWord10

我将从X开始,因为它最有意义

X(真正的问题): 我得到了这个大的动态字符串,其中包含一些我想挑选出来的单词。我想挑出的单词在一个标签中——见下面的例子

例如:

这里有一些文本,可以是任何内容。 !#我想要的文本#! 更多的文字可能是任何东西#我还想再收到一些文字#

“!”是起始标记,“!”是结束标记

输出:

我想要的文本

我还想得到一些文字

Y(我对X的解决方案)
public void doSomething\u测试(字符串文本、单词范围)
{
字符串commandsTagStart=“!#”;
字符串commandStageEnd=“#!”;
Word.Range range1=范围;
Word.Range range2=范围;
range1.Find.Execute(commandsTagStart);
while(范围1.Find.Find)
{
if(range1.Text.Contains(commandsTagStart))
{
range2.Find.Execute(commandStageEnd);
如果(范围1.End<范围2.Start)
{
Word.Range name Range=document.Range(range1.End,range2.Start);
}
}
range1.Find.Execute(commandsTagStart);
}
}
我以前运行过这段代码,它工作得很好,但在这种情况下,范围对象设置为word文档的范围,这一次无法执行,因为我只想在特定范围内搜索

但是,当我第一次运行Find.Execute()时,问题出现了,然后它找到第一条命令stagstart,并将range1对象设置为该标记的范围,这很好,但出于某种原因,range2对象也会更改

每次我更改一个范围对象(range1或range2)或对对象执行某些操作时,它们都会更改,但我不知道为什么

我只需要解X,但如果能回答Y,我将不胜感激。

您有两个对同一
范围的引用。使用:

Word.Range range2 = range.Duplicate

哇,太简单了!我以前从未见过物体有这样的行为,但这是有道理的。如果参数被替换为字符串,是否同样适用?否,因为如果在VB(a)中有
string
变量,则该变量不是引用对象。它只适用于“类”变量。
Word.Range range2 = range.Duplicate