作业在对象列表中查找匹配的对象并访问该对象的属性

本文关键字:对象 访问 属性 列表 查找 作业 | 更新日期: 2023-09-27 18:25:01

我正在尝试创建一个模拟ATM的程序。在我的程序中,我需要检查用户输入的字符串是否与对象列表中任何对象的Name属性匹配。如果不匹配,则该帐户将自动添加一些其他默认值。如果匹配,那么我需要将在另一个表单上访问的变量设置为该帐户对象的属性。此外,这些属性将需要从其他表单中更新,以便对象保持最新状态。我想我可以弄清楚如何更新这些属性,但我很难将变量设置为当前帐户,更具体地说,如何访问匹配帐户的属性。我的类构造函数如下:

class Account
{
    private string name;
    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
        }
    }
    private int acctNum = 0;
    public int AcctNumber
    {
        get
        {
            return acctNum;
        }
        set
        {
            acctNum = value;
        }
    }
    //initialize the CheckBalance value to 100.00
    private decimal checkBalance = 100.00M;
    public decimal CheckBalance
    {
        get
        {
            return checkBalance;
        }
        set
        {
            checkBalance = value;
        }
    }
    public Account(string Name)
    {
        this.Name = Name;
    }
    private decimal saveBalance = 100.00M;
    public decimal SaveBalance
    {
        get
        {
            return saveBalance;
        }
        set
        {
            saveBalance = value;
        }
    }
}

这很好,因为我唯一需要的构造函数是Name属性,而其他属性则自动设置为基值。我目前拥有的列表和相关代码如下:

    //variable that will be used to check textbox1.Text
    string stringToCheck;
    //array of class Account
    List<Account> accounts= new List<Account>();
    public MainMenu()
    {
        InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
        //set value to user's input
        stringToCheck = textBox1.Text;
        //set a var that only returns a value if the .Name already exists
        var matches = accounts.Where(p => p.Name == stringToCheck);
        //check through each element of the array
        if (!accounts.Any())
        {
            accounts.Add(new Account(stringToCheck));
        }
        else if (matches != null)

                //set variables in another form. not sure if these are working
                Variables1.selectedAccount = ;
                //is this calling the CheckBalance of the instance?
                Variables1.selectedCheckBalance = accounts[i].CheckBalance;
                //same thing?
                Variables1.selectedSaveBalance = accounts[i].SaveBalance;
                //switch to form
                AccountMenu acctMenu = new AccountMenu();
                this.Hide();
                acctMenu.Show();


        }

在上面的代码中,"else-if(matches!=null)"更像是一个填充词,因为我不知道该使用什么。当然,我还需要重写"if(!accounts.Any())"部分,因为一旦列表中至少填充了一个对象,这段代码就不会再出现了。所以,实际上,我只需要知道如何检查匹配的帐户,以及如何访问该帐户的属性,这样我就可以将Variables1属性设置为匹配。谢谢你的帮助!

作业在对象列表中查找匹配的对象并访问该对象的属性

如果它适用于您的特定情况,var account = accounts.FirstOrDefault(p => p.Name == stringToCheck)将为您提供集合中与表达式匹配的第一个帐户,如果不存在,则为null。

检查是否为account != null,以确保在尝试get属性值时不会获得null引用异常。

然后,使用account.CheckBalance获取该特定帐户的属性值。

我可能不完全理解这个问题,无法发表评论,因为我没有50的声誉:(