c# - 我可以在这里将引用类型视为值类型,还是需要克隆?
问题描述
考虑以下方法:
public (MySpecialType one, MySpecialType two) ReturnTwoSeparateObjects()
{
MySpecialType before = new MySpecialType();
MySpecialType after = before;
after.MyProperty = "A value";
return (before, after); // These will be the same object, pointless returning twice
}
这将返回相同的对象,因为分配的after
只是对分配给的内存的相同引用before
。我明白这一点,但我想在属性更改之前和之后返回对象的表示。
我知道我可能可以before
使用序列化或其他方法进行深度克隆,但这似乎是一种非常繁重的方法(我可能在这方面错了,这是一个假设)。假设我想避免深度克隆,这里有什么方法可以将before
其视为值类型吗?
解决方案
好吧,您不需要使用序列化,但您确实需要创建单独的对象。您需要克隆的深度取决于类型 - 例如,您不需要克隆任何不可变类型。(您可以在代码中引入的不变性越多,这就越容易。)
没有“将引用类型视为值类型”的概念,但即使有,它也只会自然地执行浅层克隆,所以你不会好太多。
推荐阅读
- heroku - 使用 brew 安装 Heroku
- batch-file - 从当前文件夹中的所有 zip 文件中提取所有特定文件,并将仅文件压缩回单独的文件夹批处理
- django - Django ORM 性能问题
- java - 离子cordova构建android错误nuillpoijtexception
- flutter - Flutter 小部件最佳实践:内部类与函数
- javascript - 更新一栏信息
- python - 如何在 Python 中为元组分配标签?
- ios - NavigationLink 与 SwiftUI:表达式类型不明确,没有更多上下文
- imagemagick - Imagemagick 是否具有将图像重绘/扭曲到各种地图投影的功能?即 mollweide,墨卡托,正交
- javascript - 使用 dexie db 时以意外顺序调用的 Javascript 函数