.net C#中的对象扩展等价物?

snz8szmq  于 2023-02-10  发布在  .NET
关注(0)|答案(1)|浏览(137)

我有这个代码:

invoiceSurcharges.Result = from surcharge in invoiceSurcharges.Result
                                   select new ListInvoiceSurchargesGridByInvoice
                                   {
                                       
                                   };

现在,我只想修改surcharge的一个属性,而不必将对象的每个属性都赋给新的属性。如果我能执行以下操作,那就太理想了:

invoiceSurcharges.Result = from surcharge in invoiceSurcharges.Result
                                   select new ListInvoiceSurchargesGridByInvoice
                                   {
                                       ...surcharge,
                                       AssociatedInvoice = $"{surcharge.InvoiceSerial}-{surcharge.InvoiceYear}"
                                   };

有什么办法可以用C#来做这件事吗?

4nkexdtk

4nkexdtk1#

ListInvoiceSurchargesGridByInvoice添加复制构造函数,从sucharge对象复制所有属性。您仍然可以使用属性初始化器重写特定属性。请考虑使您的对象不可变,并使属性init-only不可变,这有助于避免对象的意外变化。
但是一个更简单的方法可能是使用记录,它们很容易成为不可变的,并且with-expression附带了帮助创建副本的最小样板代码:

public record ListInvoiceSurchargesGridByInvoice{
  public string AssociatedInvoice { get; init; }
  ...
}
invoiceSurcharges.Result = from surcharge in invoiceSurcharges.Result
select surcharge with { AssociatedInvoice = $"{surcharge.InvoiceSerial}-{surcharge.InvoiceYear}"};

在EntityFramework中使用记录时有一些注意事项。如果这是一个问题,我建议做一些进一步的研究。

相关问题