如何在列表对象,银行存款中找到特定值

时间:2018-01-06 22:07:12

标签: c# visual-studio

我有一个客户列表,每个客户拥有三个bankaccount(信用,支票,退休)每个bankaccount是一个单独的类,内部有一个单独的撤销方法。我在列表中选择一个人(Visual studio),并且可以通过点击它们在另一个列表中查看他们的银行帐户。现在我想选择他们的一个帐户并将Money存入其中,现在我被卡住了。这些钱只是列表中的第一个银行帐户(索引0)......

我想我必须将客户想要存入的帐户与我的列表中的正确对象namn(正确的帐户)进行比较,但是无法弄清楚我应该如何写这个!

该帐户也可以按不同的顺序排列,所以我不能说保存= [0],检查[1],retiremet [2],

这就是我调用方法的方法

validCustomer = (Customer)lstBankKunder.SelectedItem;

if (radioButtonSaving.IsChecked == true)
{
    savingAccount = new SavingsAccount();
    savingAccount.DepositMoney(299, valdCustomer);
    lstKonton.ItemsSource = null;
    lstKonton.ItemsSource = valdCustomer.myBankAccount;
}

SavingsAccount

public override void DepositMoney(int money, Customer validCustomer)
{
    savingsaccount = new SavingsAccount();
    var item = validCustomer.myBankAccount[savingsaccount.Balance];
    item.Balance += money;
    validCustomer.myBankAccount[savingsaccount.Balance] = item;
}

2 个答案:

答案 0 :(得分:0)

我认为错误发生在您的DepositMoney方法中。您正在创建一个新的储蓄帐户,每次调用方法时我猜,初始余额为0.但是您使用此余额来选择银行帐户:

valdCustomer.myBankAccount[savingsaccount.Balance]

使用此逻辑,这将始终是列表中的第一个帐户。

答案 1 :(得分:0)

您的代码存在多个问题。您正在各个地方创建SavingsAccount课程的不必要对象。

您还没有共享Customer类的代码,所以我不确定myBankAccount属性的类型是什么。

您需要根据帐户类型从客户的多个帐户中选择合适的帐户,然后在该帐户上调用存款或取款方式。

您可以使用枚举。假设您有一个枚举AccountType,其中标识了帐户的类型。

public enum AccountType
{
    Credit,
    Check,
    Retirement
}

然后在帐户中拥有AccountType的属性。

public class BankAccount
{
    protected double balance;
    protected int accountNumber;
    protected AccountType accountType;

    public BankAccount(int accountNumber, AccountType accountType)
    {
        this.accountNumber = accountNumber;
        this.accountType = accountType;
    }

    public virtual void DepositMoney(double amount)
    {
        this.balance += amount;
    }

    public virtual void WithdrawMoney(double amount)
    {
        this.balance -= amount;
    }

    public double Balance
    {
        get
        {
            return this.balance;
        }
    }

    public AccountType AccountType
    {
        get
        {
            return this.accountType;    
        }
    }

    public override string ToString()
    {
        var output = new StringBuilder();
        output.Append(string.Format("Account Number : {0}{1}", this.accountNumber, Environment.NewLine));
        output.Append(string.Format("Account Type : {0}{1}", this.accountType, Environment.NewLine));
        output.Append(string.Format("Account Balance : {0}{1}", this.balance, Environment.NewLine));

        return output.ToString();
    }
}

在Customer类中,您可以拥有List个帐户来代表属于该客户的帐户。

public class Customer
{
    private List<BankAccount> accounts;

    public Customer()
    {
        this.accounts = new List<BankAccount>();
    }

    public string Name {get;set;}   

    public List<BankAccount> Accounts
    {
        get

        {
            return this.accounts;   
        }
    }

    public override string ToString()
    {
        var output = new StringBuilder();

        output.Append(string.Format("Customer Name : {0}{1}", this.Name, Environment.NewLine));
        output.Append(string.Format("Accounts details {0}", Environment.NewLine));

        foreach(var account in this.accounts)
        {
            output.Append(account.ToString());
        }

        return output.ToString();
    }
}

然后您可以找到特定类型的客户账户并对其执行存款或取款操作如下。

var checkAccount = customer.Accounts.FirstOrDefault(acct => acct.AccountType == AccountType.Check);
if(checkAccount != null)
{
    checkAccount.DepositMoney(3000);
}

FirstOrDefault是一种扩展方法,是LINQ的一部分。您需要在代码文件的using指令中添加using System.Linq;,无论您使用它还是什么。

注意:类,方法和属性的名称在我的答案中与您的类名不同。

我希望这可以帮助您解决问题。

编辑:编辑了在Customer类而不是Dictionary中拥有帐户列表的答案。