ForEach 循环但使用通用列表作为参数

ForEach loop but using a generic list as a parameter

好吧,我已经制作了一个显示方法,它是一个列表,所以我试图让它显示它但没有成功,但我无法做到,因为它 运行 进入我无法弄清楚的 CS1503 错误,我只是在 matter/solution.

的一些指导之后

我最终在 manageAccounts.DispalyBasicInfo(item);

的 foreach 循环中的 Class B 中发生了错误

我还在学习 C#。

Class答:

public void DisplayBasicInfo(List<Account> lstAcc)
{
    foreach (var item in lstAcc)
    {
        Account objAccTemp = item;
        lblCustomerName.Text = objAccTemp.CustomerName;
        lblCustomerNo.Text = objAccTemp.AccountID.ToString();
        if (objAccTemp.AccountType != null)
        {
            lstAccounts.Items.Add(objAccTemp.AccountID + " " + objAccTemp.AccountType + " $" + objAccTemp.BankBalance);
        }
    }
}

Class乙:

private void btnManageAccount_Click(object sender, EventArgs e)
{
    try
    {
        ManageAccounts manageAccounts = new ManageAccounts();
        string strTemp = lstCustomers.SelectedItem.ToString();
        foreach (var item in Controller.lstAccounts)
        {
            if (item.CustomerName == strTemp)
            {
                manageAccounts.DisplayBasicInfo(item);
            }
        }
        manageAccounts.Show();
        Close();
    }
    catch (Exception)
    {
        MessageBox.Show("Please select a customer or create one", "No Selection");
    }
}

DisplayBasicInfo() 方法需要一个完整的列表:

public void DisplayBasicInfo(List<Account> lstAcc)

但是当你调用它时,你没有列表。您只有一个帐户:

manageAccounts.DisplayBasicInfo(item);

此外,如果您确实将整个列表传递给方法,则只有 最后一项 会显示在屏幕上,因为循环会在每次迭代时覆盖相同的项目。

因此你可能想要这个:

public void DisplayBasicInfo(Account account)
{
    lblCustomerName.Text = account.CustomerName;
    lblCustomerNo.Text = account.AccountID.ToString();
    if (account.AccountType != null)
    {
        lstAccounts.Items.Add($"{account.AccountID} {account.AccountType} {account.BankBalance:C2}";
    }
}

最后,我不知道是谁教你使用 lstobj 之类的前缀,但不再推荐这样做。这在过去是有道理的,但现在工具已经改进了。即使是创建这种做法的微软,现在也专门发布了风格指南,要求人们不要使用这种表示法。