繁体   English   中英

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

[英]ForEach loop but using a generic list as a parameter

好吧,我已经制作了一个显示方法,它是一个列表,所以我试图让它显示它但没有成功,但我无法做到,因为它遇到了我无法理解的 CS1503 错误出去,我只是在获得有关此事/解决方案的一些指导之后。

我最终在manageAccounts.DispalyBasicInfo(item);

我还在学习 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之类的前缀,但不再推荐这样做。 这在过去是有道理的,但现在工具已经改进了。 即使是创建这种做法的微软,现在也专门发布了风格指南,要求人们不要使用这种表示法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM