【问题标题】:C# - What is the difference between String Clone() and Copy() method [duplicate]C# - String Clone() 和 Copy() 方法有什么区别
【发布时间】:2022-07-22 13:18:11
【问题描述】:

我想知道如果 Copy() 和 Clone() 方法执行相同的任务,它们之间的差异以及使用哪个方法

根据我的搜索,clone() 创建一个新字符串,而 copy() 只是复制现有字符串并使用它

如果这是正确的比哪个更好

【问题讨论】:

  • 真的没有充分的理由使用这两种方法,tbh。
  • stringICloneable,实际上并没有克隆任何东西。它只是返回自己。 string.Copy() 毫无意义,肯定会创建一个新字符串,但你只能通过Object.ReferenceEquals 来判断。
  • 在 c# 中,字符串是不可变的——这意味着默认情况下您永远不会传递 refs,而是每次传递原始数据。要复制或克隆字符串,只需执行 var string1 = string2;使用复制和克隆方法只会增加混乱
  • 您阅读文档了吗? Clone 不会做任何事情,而Copy 可能创建一个具有相同值的新实例,有时也不会。

标签: c# string


【解决方案1】:

TL;DR:

不要使用任何一种方法。 Clone 实际上并没有做任何事情,而 Copy 现在已经过时了,因为 .NET Core 3.1。

等:

我会在回答前说,因为String 值是不可变的,所以使用String.Clone()String.Copy 的充分理由并不多(或任何?)。

根据我的搜索,clone() 创建了一个新字符串,copy() 只是复制现有字符串并使用它

对不起,您的理解不正确。

根据文档(强调我的):

String.Clone() 创建字符串的副本,实际上它只是返回一个自引用:

https://docs.microsoft.com/en-us/dotnet/api/system.string.clone?view=net-6.0

返回值不是这个实例的独立副本;它只是相同数据的另一种视图。使用CopyCopyTo 方法创建一个与此实例具有相同值的单独字符串对象。

因为Clone方法只是简单地返回现有的字符串实例,所以没有理由直接调用它

至于String.Copy()

https://docs.microsoft.com/en-us/dotnet/api/system.string.copy?view=net-6.0

Copy 方法返回一个 String 对象,该对象与原始字符串具有相同的值,但表示不同的对象引用。

[...]

从 .NET Core 3.0 开始,此方法已过时。但是,我们不建议在任何 .NET 实现中使用它。特别是,由于 .NET Core 3.0 中字符串实习的变化,在某些情况下,Copy 方法不会创建新字符串,而只会返回对现有实习字符串的引用。

【讨论】:

    猜你喜欢
    • 2012-04-28
    • 2015-07-17
    • 1970-01-01
    • 2018-07-28
    • 2014-07-25
    • 2012-08-16
    • 2011-11-10
    • 2015-02-16
    • 1970-01-01
    相关资源
    最近更新 更多