恐怕这是一个非常愚蠢的问题,但我肯定错过了什么.

为什么要用String.Copy(string)呢?

文件上说

使用创建字符串的新实例

因为字符串在中是不可变的.NET,我不确定使用这种方法的好处是什么,正如我所想的那样

 string copy = String.Copy(otherString);

从所有的实际目的来看,似乎都会产生相同的结果

 string copy = otherString;

也就是说,除了正在进行的任何内部记账,以及copy不是ReferenceEquals与其他String的事实之外,没有明显的差异-String是一个不可变的类,它的等价性基于值,而不是基于标识. (感谢@Andrew Hare指出,我最初的措辞不够精确,不足以表明我意识到了Copying和Not之间的区别,但担心useful的差异.)

当然,当传递null参数时,Copy抛出ArgumentNullException,而"新实例"可能会消耗更多内存.后者似乎不是什么好处,我也不确定空判断是否是一个足够大的奖励,足以保证一个完整的复制方法.

谢谢

推荐答案

String.Copy实际上是在分配新内存,并将字符从一个字符串复制到另一个字符串;你会得到一个全新的实例,而不是两个变量都是同一个实例.如果将字符串与非托管代码一起使用,这可能很重要,因为非托管代码直接处理内存位置,并且可以对字符串进行变异.

.net相关问答推荐

如何按需计算一个值并将该值缓存在FP/F#中?

Azure SignalR 和微服务

Dotnet 反射:使用 F# 中的out参数调用 MethodInfo 上的调用

使用 PEM 文件创建 DSA 签名

如何在 C# 中将 HTTP 发布请求发送到另一个 API?

F#:跨度、提升和底部类型(或缺乏)

如何在 C# 中自动删除临时文件?

如何根据新的安全策略在 .Net 中发送邮箱?

使用多个 MemoryCache 实例

获取当前方法的名称

将双精度转换为带有 N 个小数的字符串,点作为小数分隔符,并且没有千位分隔符

如何让 .NET 的 Path.Combine 将正斜杠转换为反斜杠?

如何在 C# 7 中返回多个值?

哪个更快:清除集合或实例化新的

System.String.Copy 在 .NET 中有什么用?

C#As的 VB.NET 类似功能

如何将 WebResponse.GetResponseStream 返回转换为字符串?

ReaderWriterLockSlim 什么时候比简单的锁更好?

如何知道 DateTime 是否在 C# 中的 DateRange 之间

是否可以判断对象是否已附加到实体框架中的数据上下文?