Как правильно инициализировать двумерный массив в вызываемом классе - PullRequest
0 голосов
/ 25 апреля 2019

Выдает ошибку, что EdgeList не инициализирован.Вот класс (подходящая часть внизу):

public class TacLineStruct
{
    // The number of unit groups in the Army
    public int NumGroups
    {
        get
        {
            return _NumGroups;
        }
        set
        {
            _NumGroups = value;
        }
    }
    private int _NumGroups;

    // The number of edges, 
    public int NumEdges
    {
        get
        {
            return _NumEdges;
        }
        set
        {
            _NumEdges = value;
        }
    }
    private int _NumEdges;

    // The number of units below the threshold 
    public int NumBelowThreshold
    {
        get
        {
            return _NumBelowThreshold;
        }
        set
        {
            _NumBelowThreshold = value;
        }
    }
    private int _NumBelowThreshold;

    // The specific Group that a unit belongs to
    public int[] GroupID
    {
        get;
        set;
    }

    // The list of all the edges
    public int[][] EdgeList
    {
        get;
        set;
    }

    // The list of all the edge weights
    public float[] EdgeWeight
    {
        get;
        set;
    }

    // The geographical center of each group
    public Point[] GroupCenter
    {
        get;
        set;
    }

    public TacLineStruct(int arrayLength)
    {
        GroupID = new int[arrayLength];
        int[,] EdgeList = new int[(arrayLength * arrayLength),2];
        EdgeWeight = new float[arrayLength * arrayLength];
        GroupCenter = new Point[arrayLength];
    }
}

И вот как я его вызываю и инициализирую (фрагмент):

TacLineStruct TLS = new TacLineStruct(Army.Count);

for (int i = 0; i <= Army.Count; i++)
{
    for (int j = i + 1; j <= Army.Count; j++)
    {
        TLS.EdgeList[NumEdges][0] = i;     /* first vertex of edge */
        TLS.EdgeList[NumEdges][1] = j;     /* second vertex of edge */

        // ...
    }
}

I 'я получаю ошибку времени выполнения, что EdgeList не инициализирован.Мое лучшее предположение, что я не правильно что-то делаю с 2D-массивом с длиной, установленной во время выполнения.

Я уверен, что это что-то глупое.Помощь будет принята с благодарностью.Спасибо!

1 Ответ

2 голосов
/ 25 апреля 2019

В вашем конструкторе вы делаете:

int[,] EdgeList = new int[(arrayLength * arrayLength), 2];

, которая создает новую (локальную) переменную с тем же именем, что и у поля.Вместо этого вы должны сделать:

this.EdgeList = new int[(arrayLength * arrayLength), 2];

Вы можете опустить this, но это может помешать вам повторить эту ошибку снова.

Кроме того, вы должны изменить объявление поля на

public int[,] EdgeList

Затем вы можете установить отдельные поля в массиве с помощью:

 EdgeList[i,j] = value; 
...