.net - 当(深度)克隆时,使用 String.Copy 还是 str1 = str2?

标签 .net string clone

(深度)克隆自定义对象时,应该使用 clone.str1 = String.Copy(obj.str1) 还是 clone.str1 = obj.str1

我更喜欢后者 - 更短、更快,但它“安全”吗?

我会指向this thread ,但是,不知道该使用什么。

最佳答案

是的 - 后一个选择(简单赋值)对于字符串(在托管代码中)是安全的,如以下代码所示:

    string s1 = "Initial Value";
    string s2 = s1;

    Console.WriteLine("String1: " + s1);
    Console.WriteLine("String2: " + s2);

    s1 = "New Value";

    Console.WriteLine("String1 - after change: " + s1);
    Console.WriteLine("String2 - after change: " + s2);

输出:

String1: Initial Value
String2: Initial Value
String1 - after change: New Value
String2 - after change: Initial Value

字符串是不可变的 - 因此当您更改 s1 时,您实际上是在创建一个新字符串并对其进行赋值。 s2 的引用仍然指向旧实例。

关于.net - 当(深度)克隆时,使用 String.Copy 还是 str1 = str2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2334527/

相关文章:

.net - 我可以防止 WCF 在抛出错误时回滚事务吗?

c# - 用于从文本文件中读取意大利语字符的正确编码

java - 使用 int 作为 GregorianCalendar 的输入,但无法继续扫描 JAVA

sql - 如何在 SQL Server 中制作数据库的副本

克隆指向 int 的 void* 指针

rust - 派生特征会导致意外的编译器错误,但手动实现有效

c# - 在 Visual Studio 中显示属性值的属性

c# - 创建为 .Net Auth Cookie 交换自定义 token 的 Owin Auth Provider

java - 为什么要使用 Char 而不是 String?

string - 如何从后缀树中获取子字符串中最长的重复字符串