我正在尝试创建一个模仿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属性以匹配。谢谢你的帮助!
答案 0 :(得分:1)
如果它适用于您的特定情况,var account = accounts.FirstOrDefault(p => p.Name == stringToCheck)
将为您提供集合中与表达式匹配的第一个帐户,如果不存在,则为null。
检查account != null
是否确保在尝试get
属性值时没有获得空引用异常。
然后,使用account.CheckBalance
获取该特定帐户的属性值。
我可能没有完全理解这个问题,也无法发表评论,因为我没有50的声誉:(