1

型付きリストを含み、作成した別のクラスに派生するクラス ウィッチを作成しました。これは次のようになります。

namespace MyIntegretyCheck.Common
{
    /// <summary>
    /// Description of PolicyErrors.
    /// </summary>
    public partial class PolicyErrorEndingDates
    {
        public int ID_P {get;set;}
        public DateTime DT_S_E {get;set;}
        public DateTime DT_SC_E {get;set;}

        public List<PolicyErrorDescr> Errors {get;set;}
    }

    public partial class PolicyErrorDescr
    {
        public string Field1{get;set;}
        public string Field2 {get;set;}
        public string F1IsThanF2 {get;set;}
        public string Message {get;set;}
        public int ErrorLevel {get;set;} //0= Info | 1= Warning | 2= Error

    }
}

の型付きリストを作成し、PolicyErrorEndingDatesエントリを追加してから、ネストされたリスト Errors のエントリを次のように追加しようとしました。

public List<PolicyErrorEndingDates> MyPolicyEndingDates()
{

    DAL.PolicyEndingDates ped = new DAL.PolicyEndingDates();
    List<PolicyErrorEndingDates> MyErrors = new List<PolicyErrorEndingDates>();

    foreach(var m in ped.CheckTables())
    {
        bool HasError = false;
        PolicyErrorEndingDates p = new PolicyErrorEndingDates();
        p.ID_P = m.ID_P;

        if(m.DT_S_E != m.DT_SC_E)
        {
            PolicyErrorDescr e = new PolicyErrorDescr();
            HasError = true;
            e.Field1 = "DT_S_E";
            e.Field2 = "DT_SC_E";
            e.Message = "blablabla...";
            e.ErrorLevel = 3;
            p.Errors.Add(e);
        }

        if(HasError)
            MyErrors.Add(p);
    }
}

my 内Object reference not set to an instance of an objectの行で、デバッガーがメッセージ でクラッシュしました。私は何を間違えましたか?ネストされたリストのインスタンスを作成するにはどうすればよいですか?p.Errors.Add(e);if

4

4 に答える 4

5

List<PolicyErrorDescr>Errors プロパティにインスタンスを割り当てましたか?

まず、おそらくErrorsコレクションを外部から読み取り専用にします。つまり、リストは変更できますが、新しいリストを与えることはできません。

これは、セッターをプライベートにすることで行います。

public List<PolicyErrorDescr> Errors { get; private set; }
                                            ^-----^
                                              this

次に、コンストラクターを作成し、そこからコレクション インスタンスをそのプロパティに割り当てます。

public PolicyErrorEndingDates()
{
    Errors = new List<PolicyErrorDescr>();
}

これにより、null 参照例外が処理されます。

于 2009-08-05T10:03:37.280 に答える
1

私の推測では、pは新しいインスタンスであるため、エラーリストはインスタンス化されませんでした(Lasseが述べたように)。

e.ErrorLevel = 3;
p.Errors = new List<PolicyErrorDescr>(); //add this
p.Errors.Add(e);
于 2009-08-05T10:13:26.573 に答える
1

PolicyErrorEndingDatesのエラーリストを初期化することはありません

次のように修正した場合:

public partial class PolicyErrorEndingDates
    {
        public int ID_P {get;set;}
        public DateTime DT_S_E {get;set;}
        public DateTime DT_SC_E {get;set;}

        public List<PolicyErrorDescr> Errors {get;set;}
        public PolicyErrorEndingDates()
        {
            Errors = new List<PolicyErrorDescr>()
        }
    }
于 2009-08-05T10:13:34.000 に答える
0

p.Errorsはnullです

于 2009-08-05T10:08:28.550 に答える