我試圖創建一個模仿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();
}
在上面的代碼中,「否則,如果(匹配!= NULL)」更多的是一種填充物,因爲我不知道該用什麼。當然,我還需要重寫「if(!accounts.Any())」部分,因爲一旦這個列表至少填充了一個對象,這段代碼就不會再出現。所以,實際上,我只需要知道如何檢查匹配的帳戶以及如何訪問該帳戶的屬性,以便我可以設置Variables1屬性以匹配。謝謝你的幫助!
由於這似乎工作,對我來說很有意義,但我得到的例外「對象未設置爲一個對象的實例「對於行:Variables1.selectedCheckBalance = matches.CheckBalance;這是否意味着」匹配「不是真正引用選定的帳戶?我也將第一個if語句更改爲:if(matches == null){添加一個帳戶},但這似乎不起作用,否則它會添加該帳戶。對嗎? – 2014-09-28 19:04:20
'var matches = accounts.Where(p => p.Name == stringToCheck)'returns一個'IEnumerable',所以你不能調用'matches.CheckBalance'而不指定你想要的'matches'內的'Account'。你的'List accounts'有多個'Account'對象具有相同的'Name';當你調用'accounts.Where(p => p.Name == stringToCheck)'時,它們都會被返回。你是否將代碼更改爲上面的內容,還是你仍然使用相同的代碼? –
Walnuts
2014-09-28 19:14:31
首先我會調用這個'var account = accounts.FirstOrDefault(p => p.Name == stringToCheck)'然後,我會檢查'account'是否爲'null'。如果爲'null',那麼'account'列表中就不存在'Account',它與條件'p => p.Name == stringToCheck'匹配。 – Walnuts 2014-09-28 19:17:33