2017-12-07 8 views
0

オブジェクトの配列を所定の値で初期化しようとしていますが、オブジェクト参照がオブジェクトのインスタンスに設定されていません。
正しく初期化してから配列に値を追加しているので、問題の原因を理解できません。配列を初期化した後に配列にオブジェクトを追加できません

Sorteo P=new Sorteo(); 
P.Predetermined(); 

クラスSorteo:
メインです

// Atribute 
private ClassA[] A; 
int count=0; 

// Methods 
public Sorteo() 
{ 
    A=new ClassA[2]; 
} 
public void Add(ClassA a) 
{ 
    A[count]=a; 
    count++; 
} 
public void PredeterminedValues() 
{ 
    A[0].Add(new ClassB("SomeString1")); 
    A[1].Add(new ClassB("SomeString2")); 
} 

答えて

2

値型ではなく、参照型の配列を扱っています。

次の行では:

A = new ClassA[2]; 
    //[0] -> null 
    //[1] -> null 

あなたは確かにタイプにClassAの参照オブジェクトを保持する配列を初期化してきました。

それは実際にタイプにClassAの2つの変数を保持している。この場合

、それらのそれぞれは、(あなたがそれらを初期化have'tので)nullに設定されようとしているので、あなたは彼らに例外オブジェクトを参照しようとすると、参照がオブジェクトのインスタンスに設定されていないがスローされます。

ソリューション?

あなたの配列初期化した後にこれを追加

A[0] = new ClassA(); // not null anymore 
A[1] = new ClassA(); // not null anymore 
0

私はあなたの質問を理解するのに苦労していますが、これはあなたがしようとしていた何ですか?

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

namespace YourNameSpace 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      ClassA Item = new ClassA(); 
      Item.PredeterminedValues(); 

      foreach(string s in Item.StringArray) 
      { 
       Console.WriteLine(s); 
      } 
     } 
    } 

    public class ClassA 
    { 
     public int Counter {get;private set;} 
     public string[] StringArray{get;private set;} 

     public ClassA() 
     { 
      StringArray = new string[2]; 
     } 

     public void Add(int Value) 
     { 
      Counter += Value; 
     } 

     public void PredeterminedValues() 
     { 
      StringArray[0] = ("SomeString1"); 
      StringArray[1] = ("SomeString2"); 
     } 
    } 
} 
関連する問題