为什么我在尝试调用 ShowStatement 方法时收到 System.InvalidCastException?
Why am I receiving an System.InvalidCastException when I am trying to call my ShowStatement method?
我可以通过另一种形式将不同类型的帐户添加到列表语句中,然后我可以将其添加到列表框 lstaccounts 中。但是,当我 select 我的列表框中的一个帐户并按下查看语句按钮时,我在 'lblBank.Text = ShowStatement((IStatement)lstAccounts.SelectedItem);' 行上收到该异常...知道为什么会发生这种情况吗?
public List<IStatement> statements;
private int accountCounter = 0;
private int statementsViewed = 0;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
statements = new List<IStatement>();
}
private void btnView_Click(object sender, EventArgs e)
{
if (lstAccounts.SelectedIndex > -1)
{
lblBank.Text = ShowStatement((IStatement)lstAccounts.SelectedItem);
statementsViewed += 1;
lblTotal.Text = statementsViewed.ToString();
}
}
private string ShowStatement(IStatement item)
{
String msg = "Account Number: " + item.AccountNumber + "\n"
+ "Name: " + item.AccountName + "\n" + item.PrintStatement();
return msg;
}
private void btnAddAccount_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
if(form2.ShowDialog() == DialogResult.OK)
{
if (form2.txtValue.Text == "" && form2.txtMinMonthly.Text == "")
{
BankAccount b = form2.GetBankAccount();
statements.Add(b);
}
else if (form2.txtMinMonthly.Text == "")
{
InsurancePolicy i = form2.GetInsurancePolicy();
statements.Add(i);
}
else
{
PlatinumCurrent p = form2.GetPlatinumCurrent();
statements.Add(p);
}
foreach (IStatement os in statements)
{
lstAccounts.Items.Add(os.ToString());
accountCounter += 1;
}
}
}
我得到的确切错误是:System.InvalidCastException:“无法将类型 'System.String' 的对象转换为类型 'TelephoneBanking.IStatement'。”
您在 btnAddAccount_Click 中将其添加为 .ToString()。尝试添加项目,而不是 item.ToString()。
private void btnAddAccount_Click(object sender, EventArgs e)
{
...
foreach (IStatement os in statements)
{
lstAccounts.Items.Add(os); // ###### removed os.ToString() ######
accountCounter += 1;
}
...
我可以通过另一种形式将不同类型的帐户添加到列表语句中,然后我可以将其添加到列表框 lstaccounts 中。但是,当我 select 我的列表框中的一个帐户并按下查看语句按钮时,我在 'lblBank.Text = ShowStatement((IStatement)lstAccounts.SelectedItem);' 行上收到该异常...知道为什么会发生这种情况吗?
public List<IStatement> statements;
private int accountCounter = 0;
private int statementsViewed = 0;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
statements = new List<IStatement>();
}
private void btnView_Click(object sender, EventArgs e)
{
if (lstAccounts.SelectedIndex > -1)
{
lblBank.Text = ShowStatement((IStatement)lstAccounts.SelectedItem);
statementsViewed += 1;
lblTotal.Text = statementsViewed.ToString();
}
}
private string ShowStatement(IStatement item)
{
String msg = "Account Number: " + item.AccountNumber + "\n"
+ "Name: " + item.AccountName + "\n" + item.PrintStatement();
return msg;
}
private void btnAddAccount_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
if(form2.ShowDialog() == DialogResult.OK)
{
if (form2.txtValue.Text == "" && form2.txtMinMonthly.Text == "")
{
BankAccount b = form2.GetBankAccount();
statements.Add(b);
}
else if (form2.txtMinMonthly.Text == "")
{
InsurancePolicy i = form2.GetInsurancePolicy();
statements.Add(i);
}
else
{
PlatinumCurrent p = form2.GetPlatinumCurrent();
statements.Add(p);
}
foreach (IStatement os in statements)
{
lstAccounts.Items.Add(os.ToString());
accountCounter += 1;
}
}
}
我得到的确切错误是:System.InvalidCastException:“无法将类型 'System.String' 的对象转换为类型 'TelephoneBanking.IStatement'。”
您在 btnAddAccount_Click 中将其添加为 .ToString()。尝试添加项目,而不是 item.ToString()。
private void btnAddAccount_Click(object sender, EventArgs e)
{
...
foreach (IStatement os in statements)
{
lstAccounts.Items.Add(os); // ###### removed os.ToString() ######
accountCounter += 1;
}
...