相关疑难解决方法(0)

深度克隆对象

我想做的事情如下:

MyObject myObj = GetMyObj(); // Create and fill a new object
MyObject newObj = myObj.Clone();
Run Code Online (Sandbox Code Playgroud)

然后更改未在原始对象中反映的新对象.

我不经常需要这个功能,所以当有必要的时候,我已经使用了创建一个新对象然后单独复制每个属性,但它总是让我觉得有更好或更优雅的处理方式情况.

如何克隆或深度复制对象,以便可以修改克隆对象而不会在原始对象中反映任何更改?

.net c# clone

2135
推荐指数
34
解决办法
77万
查看次数

派生和基类,我可以明确设置基数吗?

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对象,我认为这是你可以做到的唯一方法,但如果你能以另一种方式做到这一点会好得多.

c# reflection derived-class copy-constructor

16
推荐指数
2
解决办法
2万
查看次数

使用 C# 9 记录“with”表达式可以复制并添加到新的派生实例吗?

假设我有以下内容:

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)

但是如果基本记录类型有很多属性呢?

c#-9.0

2
推荐指数
1
解决办法
516
查看次数

标签 统计

c# ×2

.net ×1

c#-9.0 ×1

clone ×1

copy-constructor ×1

derived-class ×1

reflection ×1