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}";
}
}
最后,我不知道是谁教你使用 lst
或 obj
之类的前缀,但不再推荐这样做。这在过去是有道理的,但现在工具已经改进了。即使是创建这种做法的微软,现在也专门发布了风格指南,要求人们不要使用这种表示法。
好吧,我已经制作了一个显示方法,它是一个列表,所以我试图让它显示它但没有成功,但我无法做到,因为它 运行 进入我无法弄清楚的 CS1503 错误,我只是在 matter/solution.
的一些指导之后我最终在 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}";
}
}
最后,我不知道是谁教你使用 lst
或 obj
之类的前缀,但不再推荐这样做。这在过去是有道理的,但现在工具已经改进了。即使是创建这种做法的微软,现在也专门发布了风格指南,要求人们不要使用这种表示法。