(深度)克隆自定义对象时,应该使用 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/