我想做的事情如下:
MyObject myObj = GetMyObj(); // Create and fill a new object
MyObject newObj = myObj.Clone();
Run Code Online (Sandbox Code Playgroud)
然后更改未在原始对象中反映的新对象.
我不经常需要这个功能,所以当有必要的时候,我已经使用了创建一个新对象然后单独复制每个属性,但它总是让我觉得有更好或更优雅的处理方式情况.
如何克隆或深度复制对象,以便可以修改克隆对象而不会在原始对象中反映任何更改?
public class SuperCar: Car
{
public bool SuperWheels { get {return true; } }
}
public class Car
{
public bool HasSteeringWheel { get {return true;} }
}
Run Code Online (Sandbox Code Playgroud)
如何设置派生Supercar的基类?
例如,我想简单地设置SuperCars基类,如下所示:
public void SetCar( Car car )
{
SuperCar scar = new SuperCar();
car.Base = car;
}
Run Code Online (Sandbox Code Playgroud)
基本上,如果我有Car对象,我不想手动遍历汽车的每个属性以设置SuperCar对象,我认为这是你可以做到的唯一方法,但如果你能以另一种方式做到这一点会好得多.
假设我有以下内容:
public record Settings
{
public int Setting1 { get; init; }
}
public record MoreSettings : Settings
{
public string Setting2 { get; init; }
}
...
var settings = new Settings { Setting1 = 1 };
// This is an error - CS0117
MoreSettings moreSettings = settings with { Setting2 = "A string setting" };
Run Code Online (Sandbox Code Playgroud)
有没有一种干净的方法来实现这一目标?我的语法错误吗?
显然,在这种人为的情况下,我可以手动复制每个基本属性。
var moreSettings = new MoreSettings { Setting1 = settings.Setting1, Setting2 = "A String!" };
Run Code Online (Sandbox Code Playgroud)
但是如果基本记录类型有很多属性呢?