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

2024-03-19

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

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

我会指出这个线程 https://stackoverflow.com/questions/520895/whats-the-use-of-system-string-copy-in-net,但是,不知道该使用什么。


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

    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);

Output:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当(深度)克隆时,使用 String.Copy 还是 str1 = str2? 的相关文章

  • R 中的字符串作为函数参数

    数据框chocolates列出了糖果的类型以及每种糖果的一组评级 ID sweetness filling crash snickers 0 67 0 55 0 40 milky way 0 81 0 53 0 56 我正在编写一个函数 它
  • 每个托管线程是否都有自己对应的本机线程?

    我想知道是否在 Net 中创建托管线程 通过调用Thread Start 导致在后台创建一个本机线程 那么托管线程是否有对应的本机线程呢 如果是 当托管线程等待或睡眠时 是否意味着相应的本机线程也在等待或睡眠 是的 NET 线程映射到所有当
  • 如何在加载.NET WinForm应用程序user.config文件时捕获异常?

    有时 在使用默认配置系统的 NET 2 0 WinForm 桌面应用程序中 user config文件将被损坏并且无法再加载 当配置系统尝试加载它时 它会抛出一个System Xml XmlException 抛开 为什么文件首先被损坏 的
  • 获取两个工作日之间的天数差异

    这听起来很简单 但我不明白其中的意义 那么获取两次之间的天数的最简单方法是什么DayOfWeeks当第一个是起点时 如果下一个工作日较早 则应考虑在下周 The DayOfWeek 枚举 http 20 20 5B1 5D 3a 20htt
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • System.IO.FileNotFoundException:找不到网络路径。在 Windows 7 上使用 DirectoryEntry 对象时出现异常

    我正在尝试使用 DirectoryEntry 对象连接到远程 Windows 7 计算机 这是我的代码 DirectoryEntry obDirEntry new DirectoryEntry WinNT hostName hostName
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List
  • 服务 AddJsonOptions .net core 2.1

    以前使用 net 2 0 您可以通过这种方式添加 json 内容 services AddJsonOptions options gt options SerializerSettings ContractResolver new Came
  • 在 C# 中读取/写入大型 XML 文件

    我正在开发一个带有 XML 数据库的应用程序 我有很大的 XML 文件 我必须在其中读取和写入数据 问题是我不想将整个 XML 文件加载到内存中 也不想因为性能问题而循环遍历整个文件 因为如果我将整个文件加载到内存中 这将影响应用程序性能
  • ConcurrentBag 中可能存在内存泄漏吗?

    我一直在研究新的并发集合 特别是 ConcurrentBag 引起了我的注意 由于 ConcurrentBag 在每个单独的线程上内部保存一个本地集 使用它来跟踪项目 这意味着当线程本身超出范围时 ConcurrentBag 仍将在内存中引
  • 在业务逻辑中使用反射是一种好的做法吗?

    我需要开发一个由两个主要部分组成的应用程序 具有特定业务类别的业务逻辑部分 例如书籍 图书馆 作者 一个通用部分 可以在数据网格中显示书籍 图书馆 将它们映射到数据库 通用部分使用反射从业务类中获取数据 而不需要在业务类中编写特定的数据网格
  • SQL Server:应用正则表达式替换

    这是我的 SQL 查询 select codi nivell from anc documents 示例数据是 06080100000000 06080100000000 06080100000000 06080100000000 0608
  • 将字符串与 perl 中的模式对齐?

    我在方括号内有一些字符串块 如下所示 p1 text1 label1 p2 text2 label2 p3 text3 label3 等等 每个块里面有什么并不重要 但有时会有一些没有用方括号括起来的零散文本块 例如 p1 text1 la
  • 从Asynctask返回结果

    如果我的 Android 应用程序中有这个后台工作文件 并且它从我的数据库获取数据 我如何将字符串 结果 传递给另一个类 后台工作人员连接到我的服务器 然后使用 php 连接到数据库 public class BackgroundWorke
  • 泛型和实现 IComparable

    我对泛型非常陌生 我正在尝试编写一个简单的类 它将是泛型的 但也允许对字符串成员变量的一些描述进行排序 目前我有一个基本类 但是当我尝试实现接口成员 CompareTo 时 我在顶部收到一个错误 告诉我它尚未实现 这里有什么问题呢 usin
  • 迭代字符串 R 的字符

    有人可以解释一下为什么这不会在 R 中单独打印所有数字 numberstring lt 0123456789 for number in numberstring print number 字符串不就是字符数组吗 在 R 中该怎么做 In
  • 什么是帕斯卡风格的字符串?

    The Photoshop 文件格式文档 http www adobe com devnet apps photoshop fileformatashtml 提及帕斯卡弦而不解释它们是什么 那么 它们是什么以及它们是如何编码的 Pascal
  • 从 SQL 语句中检索元数据(表名)

    我使用的是 Visual Studio 2008 我创建了一个 Winforms 应用程序 并且尝试从 SQL 语句中提取表名 con new SqlConnection connString String queryString Sele
  • Flutter/Dart:将十六进制颜色字符串转换为颜色?

    我们的数据库将颜色保存为String就像 AABBCC 所以我基本上正在寻找这样的函数 Color parseColor AABBCC 对于颤振 Color 类需要这样的东西Color 0xFF42A5F5 所以我需要转换 AABBCC t
  • Web 和 winforms 的 .Net 身份验证

    我有一个为客户端构建的 ASP NET Web 应用程序 它使用默认的 ASP NET 表单身份验证 他们现在请求一个能够 与 Web 应用程序一起工作的桌面 WinForms 应用程序 我已经创建了 Web 服务来访问他们想要从 Web

随机推荐