2

「オブジェクトのインスタンスに設定されていないオブジェクト参照」を受信する理由を理解するのに問題がありますこの行のプレゼンテーション層でエラーが発生しました:

TempAccountManager.Accounts.Add(tempAccount);

Visual Studio 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;
        }

    }
}
4

3 に答える 3

6

AccountManagerクラスがAccountsプロパティを初期化することはありません。したがってTempAccountManager.Accounts、Nullです。

このようなコンストラクターを追加すると修正されます。

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

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

}
于 2012-10-11T01:43:23.123 に答える
3

あなたはあなたの中で作成AccountsしますAccountManagerか?

あなたはどこかでやるべきです:

Accounts = new List<Account>();

編集

パブリックsetアクセサーがあります。あなたはすることができます:

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

または、Joel Muellerが提案したように、クラスにコンストラクターを追加します。しかし、一般の人が必要な場合は、考えてみてくださいset。これにより、コレクションをオブジェクトから完全に置き換えることができます。

于 2012-10-11T01:41:30.830 に答える
1

Not sure, but where do you initialize Accounts?

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

Your get, set interface provides access, but doesn't define the value.

于 2012-10-11T01:43:44.247 に答える