我担心这是一个非常愚蠢的问题,但我必须遗漏一些东西.
为什么可能要使用String.Copy(string)?
文档说明了这种方法
使用与指定String相同的值创建String的新实例.
由于字符串在.NET中是不可变的,我不确定使用此方法的好处是什么,正如我所想的那样
string copy = String.Copy(otherString);
Run Code Online (Sandbox Code Playgroud)
出于所有实际目的,似乎会产生与之相同的结果
string copy = otherString;
Run Code Online (Sandbox Code Playgroud)
也就是说,除了正在进行的任何内部簿记,以及副本不是ReferenceEqualsotherString 的事实,没有可观察到的差异 - 字符串是一个不可变的类,其相等性基于值,而不是身份.(感谢@Andrew Hare指出我的原始措辞不够精确,表明我意识到Copying和not 之间存在差异,但是担心缺乏有用的差异.)
当然,当传递null参数时,Copy会抛出一个ArgumentNullException,而"new instance"可能会占用更多内存.后者几乎不是一个好处,我不确定无效检查是一个足够大的奖金来保证整个复制方法.
谢谢.
我在浏览遗留代码时刚刚遇到这样的块:
object exeName = _connectionSettings.ApplicationName.Clone();
RandomFunction(exeName);
Run Code Online (Sandbox Code Playgroud)
起初这对我来说似乎没什么用,但它让我感到好奇。两者之间是否存在根本区别:
var copiedString = initialString;
var copiedString = initialString.Clone();
var copiedString = string.Copy(initialString);
Run Code Online (Sandbox Code Playgroud)
我创建了一个基本的单元测试,似乎表明没有,因为无论使用什么方法,它的行为方式都是相同的(复制字符串的初始影响、初始字符串的更改、复制字符串值的断言)。我错过了什么吗?