好的,假设我有一些 C# 代码可以过滤或重组传入的对象(或对象列表),如下所示:
public Customer GetCustomer()
{
var customer = _customerAdapter.GetCustomer();
ModifyCustomer(customer);
return customer;
}
private void ModifyCustomer(Customer c)
{
//some changes to customer object
}
这行得通,但我更喜欢更实用的方法,即保留新来的客户并返回一个新的(修改过的)。
深度克隆是要走的路吗?在 C# 中编码时是否推荐使用?
答案 0 :(得分:1)
最接近的内置功能可能是 records 和 with
表达式:
public record Person(string FirstName, string LastName)
{
public string[] PhoneNumbers { get; init; }
}
Person person1 = new("Nancy", "Davolio") { PhoneNumbers = new string[1] };
Person person2 = person1 with { FirstName = "John" };
答案 1 :(得分:0)
如果您不能使用 C# 9,那么您可以执行以下操作:
public class Consumer
{
public readonly string FirstName;
public readonly string LastName;
public Consumer(string firstName, string lastName)
{
this.FirstName = firstName;
this.LastName = lastName;
}
public Consumer WithFirstName(string firstName)
=> string.Equals(this.FirstName, firstName)
? this
: new Consumer(firstName, this.LastName);
public Consumer WithLastName(string lastName)
=> string.Equals(this.LastName, lastName)
? this
: new Consumer(this.FirstName, lastName);
}
}