string.Clone()有什么用途?

32

以下有两个代码示例:

# 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个回答

31

这很有用,因为字符串实现了ICloneable,所以您可以为ICloneable项的集合创建克隆的副本。当集合仅包含字符串时,这会很无聊,但当集合包含多种实现ICloneable的类型时,它就很有用。

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


但是为什么我需要IClonable对象集合的副本呢?如何进一步使用该集合,而不仅仅是创建另一个副本=)?这与“System.Object”集合相同-这是一个僵局。 - Sasha

21

回答与您的问题不直接相关,但如果您想要复制一个字符串,可以使用静态的 string.Copy() 方法。


在任何情况下都不应使用string.Copy。请参见备注:https://learn.microsoft.com/en-us/dotnet/api/system.string.copy?view=net-5.0#remarks“但是,我们不建议在任何.NET实现中使用它。” - ruslanen

3

上述代码中的.Clone()与简单赋值相同。另外,字符串是不可变的,因此在两种情况下都会进行写时复制。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接