string.Clone()有什么用?

时间:2010-08-12 06:59:50

标签: c# .net string .net-2.0

有两个代码示例:  #1

 string str1 = "hello";
 string str2 = str1; //reference to the same string
 str1 = "bye"; //new string created

和#2

string str3 = "hello";
string str4 = (string)str3.Clone();//reference to the same string
str3 = "bye";//new string created
看起来他们是完全相同的不是吗?那么使用Clone()有什么好处?当我不能使用代码#1而不是代码#2时,你能给我一个例子吗?

3 个答案:

答案 0 :(得分:24)

这很有用,因为字符串实现 ICloneable ,因此您可以为 ICloneable 项目的集合创建克隆的副本。当集合只是字符串时,这很无聊,但当集合包含多个实现 ICloneable 的类型时,它很有用。

至于复制单个字符串它没有用,因为它通过设计返回对它自己的引用。

答案 1 :(得分:21)

不直接回答您的问题,但如果您希望实际克隆字符串,可以使用静态string.Copy()方法。

答案 2 :(得分:3)

上面代码中的

.Clone()与简单赋值相同。此外,字符串是不可变的,因此在两种情况下都会写入。

.Clone()在使用不同类型的情况下会更有用,它们实现相同的接口(在本例中为IClonable),因为您无法使用简单的赋值,但仍然可以Clone()返回给ICloneable的对象并分配该引用。例如,使用ICloneable元素迭代通用集合。