【问题标题】:How to use a list of Objects in C#如何在 C# 中使用对象列表
【发布时间】:2021-08-24 14:20:17
【问题描述】:

我创建了一些代码,其中有一个对象列表。我创建了一个方法,我想在列表中的一个对象上使用它。我如何在列表中找到该对象并在该特定对象上使用该方法?这是代码:

LstInvoice.Add(new Invoice (InvNumberIn, InvTotalIn, PaidIn, DateIn, SuppNameIn )); 

我想对列表中的一个对象使用以下方法,并使用 InvoiceNumber 值选择对象:

public void MakePayment(string invoicenumberIn, double amount)
    {
        
        CurrentInvoiceTotal = InvoiceTotal - amount;
    }

如果不清楚,这是一个发票管理程序,我正在编码的当前功能是能够对发票列表中的发票进行付款。

【问题讨论】:

  • 绝不使用doublefloat来表示货币金额:它们是IEEE-754 近似类型,完全不适合表示货币值,因为它们是不精确的类型。而是使用Decimal(精确)或整数美分。
  • LstInvoice 的确切类型是什么?

标签: c# list object windows-forms-designer


【解决方案1】:

例如,您可以使用 LINQ 根据发票编号在列表中查找项目。像这样的:

public void MakePayment(string invoicenumberIn, double amount)
{
    Invoice invoice = LstInvoice.FirstOrDefault(i => i.InvNumber == invoicenumberIn);
    if (invoice != null)
        invoice.CurrentInvoiceTotal = invoice.InvoiceTotal - amount;
}

InvNumber 替换为代表Invoice 类中数字的属性名称。

【讨论】:

  • FirstOrDefaultO(n) 时间 - 我感觉MakePayment 会被重复调用。所以我建议LstInvoiceugh,匈牙利语...) 应该使用某种哈希映射来进行O(1) 查找。
  • 是的,但这与所提出的问题或这个答案有什么关系?
  • 因为您的代码使用FirstOrDefault - 并且我建议进行改进,您可以将集合记忆为地图类型以显着缩短查找时间。
猜你喜欢
  • 2016-02-05
  • 1970-01-01
  • 2017-12-02
  • 2015-01-05
  • 2018-01-06
  • 1970-01-01
  • 2019-02-01
  • 2019-12-20
  • 1970-01-01
相关资源
最近更新 更多