2

林有問題搞清楚爲什麼我收到一個「對象引用不設置到對象的實例」錯誤與該行表示層:「對象引用不設置到對象的實例」錯誤

TempAccountManager.Accounts.Add(tempAccount);

我已經通過Visual Studios Debugger和帳戶獲取創建了代碼。我相信我有一個訪問修改器的問題,不確定。

表示層

using myBudget.BusinessObject; 
using myBudget.BusinessLogic; 

namespace myBudget 
{ 
    public partial class NewBudgetWizard : Form 
    { 

     public int CurrentStep { get; set; } 

     public Account TempAccount = new Account(); 
     public AccountManager TempAccountManager = new AccountManager(); 

     public NewBudgetWizard() 
     { 

     private void createAccountList(ListView lvAccounts) 
     { 

      foreach (ListViewItem lvi in lvAccounts.Items) 
      { 

       int tempAccNumber = Int32.Parse(lvi.SubItems[0].Text); 
       string tempAccName = lvi.SubItems[1].Text; 
       string tempAccType = lvi.SubItems[2].Text; 
       decimal tempAccBalance = decimal.Parse(lvi.SubItems[3].Text, System.Globalization.NumberStyles.Currency); 

       Account tempAccount = new Account(tempAccNumber, tempAccName, tempAccType, tempAccBalance, DateTime.Now); 
       TempAccount = new Account(tempAccNumber, tempAccName, tempAccType, tempAccBalance, DateTime.Now); 

       TempAccountManager.Accounts.Add(tempAccount); 

      } 

     } 

    } 
} 

業務邏輯層

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Collections; 
using myBudget.BusinessObject; 

namespace myBudget.BusinessLogic 
{ 
    public class AccountManager : Account 
    { 

     public List<Account> Accounts { get; set; } 

    } 
} 

業務對象

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace myBudget.BusinessObject 
{ 
    public class Account 
    { 

     public int AccountID { get; set; } 

     public int UserID { get; set; } 

     public int Number { get; set; } 

     public string Name { get; set; } 

     public string Type { get; set; } 

     public decimal Balance { get; set; } 

     public DateTime ReconcileTimeStamp { get; set; } 

     public Account() 
     { 

     } 

     public Account(int number, string name, string type, decimal balance, DateTime reconcileTimeStamp) 
     { 
      Number = number; 
      Name = name; 
      Type = type; 
      Balance = balance; 
      ReconcileTimeStamp = reconcileTimeStamp; 
     } 

    } 
} 

回答

6

AccountManager類別從不初始化Accounts屬性。因此TempAccountManager.Accounts爲空。

像這樣添加一個構造函數可以修復它。

public class AccountManager : Account 
{ 
    public AccountManager() 
    { 
     Accounts = new List<Account>(); 
    } 

    public List<Account> Accounts { get; set; } 

} 
+1

謝謝!希望我可以投票多一個答案。自從你發佈答案之前,並有更多的代碼,我要提交爲答案。 –

3

d o您在AccountManager中創建Accounts

你應該做的地方:

Accounts = new List<Account>(); 

編輯

你已經有了公共set訪問。你可以這樣做:

TempAccountManager.Accounts = new List<Account>(); 

或者像Joel Mueller建議的那樣向該類添加一個構造函數。但仔細想想,如果你需要公衆set。它提供了一個機會,完全取代你的收藏物。

+0

不,我沒有。我會在物業做那件事嗎? –

+0

謝謝!固定。我希望我可以爲一個正確的答案投票。 –

+0

@JonH你可以接受一個你認爲最好的答案。 – horgh

1

不確定,但您在哪裏初始化帳戶?

public List<Account> Accounts { get; set; } 

您的get,set接口提供了訪問權限,但沒有定義該值。

相關問題